package pe.gob.mininter.dirandro.vaadin.panel.mantenimiento;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import pe.gob.mininter.dirandro.model.Adjunto;
import pe.gob.mininter.dirandro.model.Correo;
import pe.gob.mininter.dirandro.model.Detalle;
import pe.gob.mininter.dirandro.model.Direccion;
import pe.gob.mininter.dirandro.model.Distrito;
import pe.gob.mininter.dirandro.model.Identificacion;
import pe.gob.mininter.dirandro.model.Imagen;
import pe.gob.mininter.dirandro.model.Opcion;
import pe.gob.mininter.dirandro.model.Pais;
import pe.gob.mininter.dirandro.model.Parametro;
import pe.gob.mininter.dirandro.model.Parentesco;
import pe.gob.mininter.dirandro.model.Persona;
import pe.gob.mininter.dirandro.model.Valor;
import pe.gob.mininter.dirandro.service.CorreoService;
import pe.gob.mininter.dirandro.service.DetallePersonaService;
import pe.gob.mininter.dirandro.service.DireccionService;
import pe.gob.mininter.dirandro.service.IdentificacionService;
import pe.gob.mininter.dirandro.service.ImagenService;
import pe.gob.mininter.dirandro.service.ParametroService;
import pe.gob.mininter.dirandro.service.ParentescoService;
import pe.gob.mininter.dirandro.service.PersonaService;
import pe.gob.mininter.dirandro.service.UbigeoService;
import pe.gob.mininter.dirandro.service.ValorService;
import pe.gob.mininter.dirandro.util.BeanValidar;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.util.HarecUtil;
import pe.gob.mininter.dirandro.vaadin.util.AdjuntarReceiver;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.DirandroComponent;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.terminal.FileResource;
import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.OptionGroup;
import com.vaadin.ui.PopupDateField;
import com.vaadin.ui.ProgressIndicator;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
import com.vaadin.ui.TabSheet.Tab;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.TreeTable;
import com.vaadin.ui.Upload;
import com.vaadin.ui.Upload.FailedEvent;
import com.vaadin.ui.Upload.FinishedEvent;
import com.vaadin.ui.Upload.StartedEvent;
import com.vaadin.ui.Upload.SucceededEvent;
import com.vaadin.ui.VerticalLayout;

public class PanelMantenPersona extends DirandroComponent implements ClickListener, ValueChangeListener {

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;
	@AutoGenerated
	private VerticalLayout pnlPrincipal;
	@AutoGenerated
	private TabSheet tabPersona;
	@AutoGenerated
	private VerticalLayout verticalLayout_7;
	@AutoGenerated
	private HorizontalLayout pnlImgImagen;
	@AutoGenerated
	private Table tblImagenes;
	@AutoGenerated
	private Label lblImgValor;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_6;
	@AutoGenerated
	private Button btnImgAgregar;
	@AutoGenerated
	private HorizontalLayout pnlImagenUpload;
	@AutoGenerated
	private Button btnImgCancelar;
	@AutoGenerated
	private ProgressIndicator proIndImagen;
	@AutoGenerated
	private ComboBoxLOVS cmbImgTipo;
	@AutoGenerated
	private Label lblImgTipo;
	@AutoGenerated
	private VerticalLayout verticalLayout_6;
	@AutoGenerated
	private Table tblCorrCorreos;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_5;
	@AutoGenerated
	private Button btnCorrNuevo;
	@AutoGenerated
	private TextField txtCorCorreo;
	@AutoGenerated
	private VerticalLayout verticalLayout_5;
	@AutoGenerated
	private Table tblDirDirecciones;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;
	@AutoGenerated
	private Button btnDirAgregar;
	@AutoGenerated
	private TextField txtDirReferencia;
	@AutoGenerated
	private TextField txtDirDireccion;
	@AutoGenerated
	private HorizontalLayout pnlDireccion1;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_4;
	@AutoGenerated
	private ComboBox cmbDirDistrito;
	@AutoGenerated
	private VerticalLayout verticalLayout_3;
	@AutoGenerated
	private HorizontalLayout pnlPersona10;
	@AutoGenerated
	private Button btnDetGrabar;
	@AutoGenerated
	private HorizontalLayout pnlPersona9;
	@AutoGenerated
	private TextArea txaDetUltVisto;
	@AutoGenerated
	private TextArea txaDetRazgoFacial;
	@AutoGenerated
	private TextArea txaDetVestimenta;
	@AutoGenerated
	private HorizontalLayout pnlPersona8;
	@AutoGenerated
	private TextArea txaDetSenias;
	@AutoGenerated
	private ComboBox cmbDetProfesion;
	@AutoGenerated
	private TextField txtDetCalzado;
	@AutoGenerated
	private HorizontalLayout pnlPersona7;
	@AutoGenerated
	private ComboBox cmbDetFormaBoca;
	@AutoGenerated
	private ComboBox cmbDetTipoLabio;
	@AutoGenerated
	private ComboBox cmbDetFormaCara;
	@AutoGenerated
	private ComboBox cmbDetTipoNariz;
	@AutoGenerated
	private HorizontalLayout pnlPersona6;
	@AutoGenerated
	private ComboBox cmbDetColorOjo;
	@AutoGenerated
	private ComboBox cmbDetTipoOjo;
	@AutoGenerated
	private ComboBox cmbDetCorteCabello;
	@AutoGenerated
	private ComboBox cmbDetColorCabello;
	@AutoGenerated
	private HorizontalLayout pnlPersona5;
	@AutoGenerated
	private ComboBox cmbDetTipoRaza;
	@AutoGenerated
	private ComboBox cmbDetTipoCabello;
	@AutoGenerated
	private ComboBox cmbDetContextura;
	@AutoGenerated
	private ComboBox cmbDetPiel;
	@AutoGenerated
	private HorizontalLayout pnlPersona4;
	@AutoGenerated
	private ComboBox cmbDetTipoOreja;
	@AutoGenerated
	private ComboBox cmbDetTipoCeja;
	@AutoGenerated
	private TextField txtDetPeso;
	@AutoGenerated
	private TextField txtDetTalla;
	@AutoGenerated
	private VerticalLayout verticalLayout_2;
	@AutoGenerated
	private Table tblIdentificaciones;
	@AutoGenerated
	private HorizontalLayout pnlIdentificacion1;
	@AutoGenerated
	private Button btnIdtGrabar;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_2;
	@AutoGenerated
	private TextField txtIdtNumeroDoc;
	@AutoGenerated
	private ComboBox cmbIdtTipodoc;
	@AutoGenerated
	private VerticalLayout verticalLayout_4;
	@AutoGenerated
	private VerticalLayout verticalLayout_11;
	@AutoGenerated
	private Table tblParentescos;
	@AutoGenerated
	private VerticalLayout verticalLayout_9;
	@AutoGenerated
	private HorizontalLayout pnlParentesco2;
	@AutoGenerated
	private TextField txtParNacionalidad;
	@AutoGenerated
	private TextField txtParNumero;
	@AutoGenerated
	private TextField txtParTipoDocumento;
	@AutoGenerated
	private HorizontalLayout pnlParentesco1;
	@AutoGenerated
	private Button btnParAgregar;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_7;
	@AutoGenerated
	private Button btnParRegPersona;
	@AutoGenerated
	private ComboBox cmbParPariente;
	@AutoGenerated
	private ComboBox cmbParTipoParentesco;
	@AutoGenerated
	private VerticalLayout verticalLayout_10;
	@AutoGenerated
	private HorizontalLayout pnlPersona3;
	@AutoGenerated
	private Button btnCancelar;
	@AutoGenerated
	private Button btnPerGrabar;
	@AutoGenerated
	private HorizontalLayout pnlPersona2;
	@AutoGenerated
	private ComboBox cmbPerPersonaVerdadera;
	@AutoGenerated
	private ComboBox cmbPerLugarNac;
	@AutoGenerated
	private ComboBox cmbPerNacionalidad;
	@AutoGenerated
	private HorizontalLayout pnlPersona1;
	@AutoGenerated
	private OptionGroup rbPerSexo;
	@AutoGenerated
	private PopupDateField dtPerNacimiento;
	@AutoGenerated
	private ComboBox cmbPerEstadoCivil;
	@AutoGenerated
	private HorizontalLayout pnlPersona0;
	@AutoGenerated
	private TextField txtPerApeMaterno;
	@AutoGenerated
	private TextField txtPerApePaterno;
	@AutoGenerated
	private TextField txtPerNombres;
	@AutoGenerated
	private HorizontalLayout pnlPersona;
	@AutoGenerated
	private TextField txtPerNumDoc;
	@AutoGenerated
	private ComboBox cmbPerTipoDoc;
	@AutoGenerated
	private VerticalLayout verticalLayout_8;
	@AutoGenerated
	private TreeTable tblPerPersonas;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_9;
	@AutoGenerated
	private Button btnLimpiar;
	@AutoGenerated
	private Button btnBuscar;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_8;
	@AutoGenerated
	private ComboBox cmbBusDistrito;
	@AutoGenerated
	private ComboBox cmbBusNacionalidad;
	@AutoGenerated
	private ComboBoxLOVS cmbBusEstCivil;
	@AutoGenerated
	private HorizontalLayout horizontalLayout_3;
	@AutoGenerated
	private TextField txtBusNroDoc;
	@AutoGenerated
	private ComboBoxLOVS cmbBusTipoDoc;
	@AutoGenerated
	private TextField txtBusMaterno;
	@AutoGenerated
	private TextField txtBusPaterno;
	@AutoGenerated
	private TextField txtBusNombre;
	/**
	 * The constructor should first build the main layout, set the
	 * composition root and then do any custom initialization.
	 *
	 * The constructor will not be automatically regenerated by the
	 * visual editor.
	 */

	private static final long serialVersionUID = 259296676220762744L;
	private static final Logger logger = Logger.getLogger( PanelMantenPersona.class );
	
	private static final String COLUMN_ID = "COLUMN_ID";
	private static final String PARAM_LIMPIAR_BUSQUEDA = "busqueda";
	
//	private PanelAgregarPersona pnlAgregarPersona;
	
	private ValorService valorService;
	private PersonaService personaService;
	private DetallePersonaService detallePersonaService;
	private CorreoService correoService;
	private DireccionService direccionService;
	private ParentescoService parentescoService;
	private UbigeoService ubigeoService;
	private IdentificacionService identificacionService;
	private ImagenService imagenService;
	private ParametroService parametroService;
	
	private List<Valor> lstTipoDocPersona;
	private List<Valor> lstEstadoCivil;	
	private List<Pais> lstPaises;
	private List<Distrito> lstDistritos;	
	private List<Valor> lstTipoCeja;
	private List<Valor> lstTipoOreja;
	private List<Valor> lstColorPiel;
	private List<Valor> lstContextura;
	private List<Valor> lstTipoCabello;
	private List<Valor> lstTipoRaza;
	private List<Valor> lstColorCabello;
	private List<Valor> lstCorteCabello;
	private List<Valor> lstTipoOjo;
	private List<Valor> lstColorOjo;
	private List<Valor> lstTipoNariz;
	private List<Valor> lstFormaCara;
	private List<Valor> lstTipoLabio;
	private List<Valor> lstFormaBoca;
	private List<Valor> lstProfesion;
	private List<Valor> lstTipoParentescos;
	
	private List<Persona> lstPersonas;
	private List<Correo> lstCorreos;
	private List<Direccion> lstDirecciones;
	private List<Parentesco> lstparentescos;
	private List<Identificacion> lstIdentificaciones;
	//private List<Valor> lstTipoAdjuntos;
	private List<Imagen> lstImagenes;
	
	private Parentesco parentesco;
	private Persona persona;
	private Detalle detalle;
	private Correo correo;
	private Direccion direccion;
	private Identificacion identificacion;
	private Parametro parametroSize;
	private Parametro parametroRuta;
	
	//** Variables para los Adjuntos **//
	private Adjunto imagenAdjunta = null;
	private AdjuntarReceiver receiver=new AdjuntarReceiver();
	private Upload uploadImagen = new Upload(null, receiver);
//	private StreamResource resource;
	private long imageSize = 0;
	private String rutaDocumento;
	private Embedded image;
	private boolean flagNuevaPersona, flagNuevoDetalle, flagNuevoCorreo, flagNuevaDireccion, flagNuevoParentesco, flagNuevaIdentificacion;
	private HierarchicalContainer hwContainer ;
	
	public PanelMantenPersona(List<Opcion> acciones, String height) {
		super(acciones, height);
		valorService = Injector.obtenerServicio(ValorService.class);
		personaService = Injector.obtenerServicio(PersonaService.class);
		detallePersonaService = Injector.obtenerServicio(DetallePersonaService.class);
		correoService =  Injector.obtenerServicio(CorreoService.class);
		direccionService = Injector.obtenerServicio(DireccionService.class);
		parentescoService = Injector.obtenerServicio(ParentescoService.class );
		ubigeoService = Injector.obtenerServicio(UbigeoService.class );
		identificacionService = Injector.obtenerServicio(IdentificacionService.class);
		imagenService = Injector.obtenerServicio(ImagenService.class);
		parametroService = Injector.obtenerServicio(ParametroService.class);
		
		buildMainLayout();
		setCompositionRoot(mainLayout);
		postConstruct();
		debugId();
	}
	
	private void debugId(){
		
	}
	
	public void postConstruct() {
		pnlParentesco2.addStyleName("center_area");
		btnParRegPersona.addListener((ClickListener)this);
		//Inicializar listas 
		lstTipoDocPersona = valorService.obtenerLista(Constante.LISTA.CODIGO.DOCUMENTO_TIPO);	
		lstEstadoCivil = valorService.obtenerLista(Constante.LISTA.CODIGO.ESTADO_CIVIL);
		lstPaises = ubigeoService.obtenerPaises();
		lstDistritos = ubigeoService.obtenerTodos();
		lstPersonas = personaService.buscar(null);
		//lstTipoAdjuntos = valorService.obtenerLista(Constante.LISTA.CODIGO.ADJUNTO_TIPO);
		
		inicializaPanelBusqueda();
		//inicializar paneles
		inicializaPanelPersona();
		inicializaPanelIdentificaciones();
		inicializaPanelDetalle();
		inicializaPanelParentesco();
		inicializaPanelDirecciones();
		inicializaPanelCorreo();
		inicializaPanelImagen();
		tabAddListener();
	}
	
	private void inicializaPanelBusqueda(){
		
		cmbBusEstCivil.setInputPrompt("Estado Civil");
		cmbBusTipoDoc.setInputPrompt("Tipo Doc.");
		cmbBusNacionalidad.setInputPrompt("Nacionalidad");
		cmbBusDistrito.setInputPrompt("Distrito - Provincia - Departamento");

		cmbBusDistrito.setItemCaptionPropertyId("nombreCompleto");
		cmbBusDistrito.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,  lstDistritos));
		cmbBusDistrito.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		cmbBusNacionalidad.setItemCaptionPropertyId("nombre");
		cmbBusNacionalidad.setContainerDataSource(new BeanItemContainer<Pais>(Pais.class, lstPaises));
		cmbBusNacionalidad.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		cmbBusEstCivil.setCodigoLista( Constante.LISTA.CODIGO.ESTADO_CIVIL);
		cmbBusTipoDoc.setCodigoLista( Constante.LISTA.CODIGO.DOCUMENTO_TIPO);
		
		hwContainer = new HierarchicalContainer();
		hwContainer.addContainerProperty("id", Long.class, 0L);
		hwContainer.addContainerProperty("nombres", String.class, "");
		hwContainer.addContainerProperty("apePaterno", String.class, "");
		hwContainer.addContainerProperty("apeMaterno", String.class, "");	
		hwContainer.addContainerProperty("padre", Persona.class, null);		
		hwContainer.addContainerProperty("padre.id", Long.class, 0L);
		hwContainer.addContainerProperty("tipoDoc", String.class, "");
		hwContainer.addContainerProperty("nroDoc", String.class, "");
		hwContainer.addContainerProperty("estadoCivil", String.class, "");
		hwContainer.addContainerProperty("nacionalidad", String.class, "");
		hwContainer.addContainerProperty("distrito", String.class, "");
		

		tblPerPersonas.setContainerDataSource(hwContainer);
		tblPerPersonas.setItemCaptionPropertyId("nombres");		
		tblPerPersonas.setVisibleColumns(new Object[]{"nombres","apePaterno","apeMaterno","tipoDoc","nroDoc","estadoCivil","nacionalidad","distrito"});
		
		tblPerPersonas.setColumnHeader("nombres", "Nombres");
		tblPerPersonas.setColumnHeader("apePaterno", "A. Paterno");
		tblPerPersonas.setColumnHeader("apeMaterno", "A. Materno");
		tblPerPersonas.setColumnHeader("tipoDoc", "Tipo Documento");
		tblPerPersonas.setColumnHeader("nroDoc", "Nro. Documento");
		tblPerPersonas.setColumnHeader("estadoCivil", "Estado Civil");
		tblPerPersonas.setColumnHeader("nacionalidad", "Nacionalidad");
		tblPerPersonas.setColumnHeader("distrito", "Lugar de Nacimiento");
		
		tblPerPersonas.setSelectable(true);
		tblPerPersonas.setImmediate(true);
		tblPerPersonas.setNullSelectionAllowed(true);
		tblPerPersonas.setNullSelectionItemId(null);
		tblPerPersonas.addListener(new ValueChangeListener() {
			 
			private static final long serialVersionUID = 1982293287765644219L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblPerPersonas.getValue() == null;
				if(esModoNuevo){
					tblPerPersonas.setValue(null);
					habilitarEdicion(!esModoNuevo);
				}else {
					
					Item item = tblPerPersonas.getItem(tblPerPersonas.getValue());
					persona = personaService.obtener( new Long( item.getItemProperty("id").getValue().toString() ));
					detalle = detallePersonaService.obtenerPorPersona(  new Long( item.getItemProperty("id").getValue().toString() ) );
					lstCorreos = correoService.buscar( new Correo(persona));
					lstparentescos = parentescoService.obtenerParientesXPersona( persona.getId() , true);
					lstDirecciones = direccionService.buscar(new Direccion(persona));
					lstIdentificaciones = identificacionService.obtenerIdentificacionesXPersona( persona.getId() , true );
					
					Imagen imagen= new Imagen();
					imagen.setPersona(persona);
					lstImagenes = imagenService.buscar(imagen);
										
					llenaPanelCorreos();
					llenaPanelPersona();					
					llenaPanelDetalle();
					llenaPanelDirecciones();
					llenaPanelParentesco();
					llenaPanelIdentificacion();
					llenaPanelImagenes();
					habilitarEdicion(!esModoNuevo);
					
				}
			}
		});
		
		btnBuscar.addListener( (ClickListener)this );
		
		btnLimpiar.addListener( (ClickListener)this );
	}
	

	private void cargarPersonas(Map<String,List<Persona>> map){			
		
		tblPerPersonas.removeAllItems();
		
		if(map.get(Constante.OPCION.KEY_PADRE) != null){
			recorrer(Constante.OPCION.KEY_PADRE, map, null, hwContainer);
		}
		
		for (Object id : tblPerPersonas.rootItemIds()){
			tblPerPersonas.setCollapsed(id, false);
        }
		
		for (Object itemId: tblPerPersonas.getItemIds())
			tblPerPersonas.setCollapsed(itemId, false);	

	}	

	private void buscarPersona(){
		logger.debug("buscarPersona");
		int cant = 0 ;
		Persona per = new Persona();
		if(!StringUtils.isEmpty(txtBusNombre.getValue().toString())){
			per.setNombres( HarecUtil.nullToEmpty( txtBusNombre.getValue() ));
			cant++;
		}
		if(!StringUtils.isEmpty(txtBusPaterno.getValue().toString())){
			per.setApePaterno( HarecUtil.nullToEmpty( txtBusPaterno.getValue() ));
			cant++;
		}
		if(!StringUtils.isEmpty(txtBusMaterno.getValue().toString())){
			per.setApeMaterno( HarecUtil.nullToEmpty( txtBusMaterno.getValue() ));
			cant++;
		}
		if(!StringUtils.isEmpty(txtBusNroDoc.getValue().toString())){
			per.setNroDocumento( HarecUtil.nullToEmpty( txtBusNroDoc.getValue() ));
			cant++;
		}
		if( cmbBusTipoDoc.getValor() != null){
			per.setTipoDocumento( (Valor)cmbBusTipoDoc.getValor() );
			cant++;
		}
		if( cmbBusEstCivil.getValor()!=null ){
			per.setEstadoCivil( cmbBusEstCivil.getValor() );
			cant++;
		}
		if( cmbBusNacionalidad.getValue()!=null ){
			per.setNacionalidad( (Pais)cmbBusNacionalidad.getValue() );
			cant++;
		}
		if( cmbBusDistrito.getValue()!=null){
			per.setLugarNacimiento( (Distrito)cmbBusDistrito.getValue() );
			cant++;
		}
		logger.debug("cant " + cant ) ;
		if(cant > 0){
			Map<String,List<Persona>> map = personaService.listarPersonas( per );
			logger.debug( " elementos a pintar "+map.size() );
			cargarPersonas(map);	
		}
	}
	
	
	//TODO: Arreglar para no recargar toda la pantalla
	private void tabAddListener(){
		tabPersona.addListener(new TabSheet.SelectedTabChangeListener() {
			
			private static final long serialVersionUID = 1505353968741313203L;

			@Override
			public void selectedTabChange(SelectedTabChangeEvent event) {
				if( event.getTabSheet().getSelectedTab() != null){
					String tabName = tabPersona.getTab(event.getTabSheet().getSelectedTab()).getCaption();

					if (tabName.equals("Imagen")) {
						parametroSize = parametroService.obtener(Constante.PARAMETRO.ADJUNTOS_SIZE);
						if (parametroSize != null) imageSize = Long.valueOf(parametroSize.getValor());
						
						//parametroRuta = parametroService.obtener(Constante.PARAMETRO.PATH_WINDOW);
						parametroRuta = parametroService.obtener(Constante.PARAMETRO.ADJUNTOS_PATH);
						if (parametroRuta != null) rutaDocumento = parametroRuta.getValor();
						//rutaDocumento += "PER_" + persona.getId() + "\\" ; 
					}
	
				}
			}
		});
	}

	/**
	 * Registro de Datos Personales
	 */
	
	private void inicializaPanelPersona(){

		lstTipoCabello = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_CABELLO);
		lstTipoCeja = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_CEJA);
		lstTipoLabio = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_LABIO);
		lstTipoNariz = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_NARIZ);
		lstTipoOjo = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_OJO);
		lstTipoOreja = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_OREJA);
		lstTipoRaza = valorService.obtenerLista(Constante.LISTA.CODIGO.TIPO_RAZA);
		lstColorCabello = valorService.obtenerLista(Constante.LISTA.CODIGO.COLOR_CABELLO);
		lstColorOjo = valorService.obtenerLista(Constante.LISTA.CODIGO.COLOR_OJO);
		lstColorPiel = valorService.obtenerLista(Constante.LISTA.CODIGO.COLOR_PIEL);
		lstContextura = valorService.obtenerLista(Constante.LISTA.CODIGO.CONTEXTURA);
		lstCorteCabello = valorService.obtenerLista(Constante.LISTA.CODIGO.CORTE_CABELLO);
		lstFormaBoca = valorService.obtenerLista(Constante.LISTA.CODIGO.FORMA_BOCA);
		lstFormaCara = valorService.obtenerLista(Constante.LISTA.CODIGO.FORMA_CARA);
		lstProfesion = valorService.obtenerLista(Constante.LISTA.CODIGO.PROFESION);
		
		BeanItemContainer<Valor> bicEstados = new BeanItemContainer<Valor>(Valor.class,  lstTipoDocPersona);
		cmbPerTipoDoc.setInputPrompt("Tipo de Documento");
		cmbPerTipoDoc.setItemCaptionPropertyId("nombre");
		cmbPerTipoDoc.setContainerDataSource(bicEstados);
		
		cmbPerPersonaVerdadera.setInputPrompt("Persona Verdadera");
		cmbPerPersonaVerdadera.setItemCaptionPropertyId("nombreCompleto");
		cmbPerPersonaVerdadera.setContainerDataSource(new BeanItemContainer<Persona>(Persona.class, lstPersonas));
		
		cmbPerEstadoCivil.setInputPrompt("Estado Civil");
		cmbPerEstadoCivil.setItemCaptionPropertyId("nombre");
		cmbPerEstadoCivil.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstEstadoCivil));
		
		cmbPerLugarNac.setInputPrompt("Distrito - Provincia - Departamento");
		cmbPerLugarNac.setItemCaptionPropertyId("nombreCompleto");
		cmbPerLugarNac.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,  lstDistritos));
		cmbPerLugarNac.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		cmbPerNacionalidad.setInputPrompt("Nacionalidad");
		cmbPerNacionalidad.setItemCaptionPropertyId("nombre");
		cmbPerNacionalidad.setContainerDataSource(new BeanItemContainer<Pais>(Pais.class, lstPaises));
		cmbPerNacionalidad.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		
		
		
		//rbPerSexo.setImmediate(true);
		rbPerSexo.addItem("M");
		rbPerSexo.addItem("F");
		
		
		dtPerNacimiento.setDateFormat("dd/MM/yyyy");
		btnPerGrabar.addListener((ClickListener)this);
		refrescar("persona");
	}

	private void llenaPanelPersona(){		
		if( persona != null ){			
			txtPerNombres.setValue(persona.getNombres());
			txtPerApePaterno.setValue(persona.getApePaterno());
			txtPerApeMaterno.setValue(persona.getApePaterno());
			txtPerNumDoc.setValue(persona.getNroDocumento());
			dtPerNacimiento.setValue(persona.getFecNacimiento());
			rbPerSexo.setValue(persona.getSexo());
			cmbPerEstadoCivil.select(persona.getEstadoCivil());
			cmbPerTipoDoc.select(persona.getTipoDocumento());
			cmbPerPersonaVerdadera.setValue(persona.getPerPersona());
			
			for (Distrito ubigeo : lstDistritos) {
				if(persona.getLugarNacimiento() !=null )
					if(ubigeo.getId().equals((Long)persona.getLugarNacimiento().getId())){
						cmbPerLugarNac.select(ubigeo);
						break;
					}
			}
			
			for (Pais pais : lstPaises) {
				if(persona.getNacionalidad() != null)
					if(pais.getId().equals((Long)persona.getNacionalidad().getId())){
						cmbPerNacionalidad.select(pais);
						break;
					}
			}
		}		
	}
	
	private void registrarPersona(){
		//Persona per = new Persona();
		persona.setApeMaterno(txtPerApeMaterno.getValue().toString() );
		persona.setApePaterno(txtPerApePaterno.getValue().toString() );
		persona.setEstadoCivil((Valor) cmbPerEstadoCivil.getValue());
		persona.setFecNacimiento((Date) dtPerNacimiento.getValue() );
		persona.setNacionalidad((Pais) cmbPerNacionalidad.getValue() );
		
		persona.setNombres(txtPerNombres.getValue().toString() );
		persona.setNroDocumento(txtPerNumDoc.getValue().toString() );
		persona.setSexo( rbPerSexo.getValue()!= null ? rbPerSexo.getValue().toString() : StringUtils.EMPTY );
		persona.setPerPersona( (Persona)cmbPerPersonaVerdadera.getValue() );
		persona.setTipoDocumento( (Valor)cmbPerTipoDoc.getValue() );
		persona.setLugarNacimiento((Distrito) cmbPerLugarNac.getValue());
		
		HarecUtil.validar(getWindow(), persona, new BeanValidar[]{
			new BeanValidar("tipoDocumento", new Object[]{"Tipo de Documento"}, cmbPerTipoDoc),
			new BeanValidar("nroDocumento", new Object[]{"Nro de Documento"}, txtPerNumDoc),
			new BeanValidar("nombres", new Object[]{"Nombres"}, txtPerNombres),
			new BeanValidar("apePaterno", new Object[]{"Apellido Paterno"}, txtPerApePaterno),
			new BeanValidar("apeMaterno", new Object[]{"Apellido Materno"}, txtPerApeMaterno),
			new BeanValidar("sexo", new Object[]{"Sexo"}, rbPerSexo),
			new BeanValidar("nacionalidad", new Object[]{"Nacionalidad"}, cmbPerNacionalidad)});
		
		if(flagNuevaPersona)
			personaService.crear(persona);
		else
			personaService.actualizar(persona);
		refrescar("persona");
		//TODO algo pra volver a seleccionar la persona en la tabla y que cargue sus datos en los tabs
	}

	/**
	 * Registro de Datos de Parientes de la Persona
	 */

	private void cambiaCombo(ValueChangeEvent event) {
		logger.debug( "muestro datos de un patiente seleccionado");
		if( cmbParPariente.getValue() != null){
			Persona parSel = (Persona)cmbParPariente.getValue();
			txtParNumero.setValue(parSel.getNroDocumento());
			txtParNacionalidad.setValue(parSel.getNacionalidad()!=null ? parSel.getNacionalidad().getNombre() : "");
			txtParTipoDocumento.setValue(persona.getTipoDocumento()!=null ? persona.getTipoDocumento().getNombre() : "");
		}
	}
	
	private void inicializaPanelParentesco(){
		btnParRegPersona.setIcon(Constante.ICONOS.CREATE);
		pnlParentesco2.setEnabled(false);
		lstTipoParentescos = valorService.obtenerLista(Constante.LISTA.CODIGO.PARENTESCO);
		
		cmbParTipoParentesco.setInputPrompt("Tipo de Parentesco");
		cmbParTipoParentesco.setItemCaptionPropertyId("nombre");
		cmbParTipoParentesco.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoParentescos ));
		 
		cmbParPariente.setImmediate(true);
		cmbParPariente.setInputPrompt("Pariente");
		cmbParPariente.setItemCaptionPropertyId("nombreCompleto");
		cmbParPariente.setContainerDataSource(new BeanItemContainer<Persona>(Persona.class,  lstPersonas ));
		cmbParPariente.addListener( new ValueChangeListener() {
			
			/**
			 * 
			 */
			private static final long serialVersionUID = -6213576334461528840L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				cambiaCombo( event );
			}

			
		});
		
		tblParentescos.setSelectable(true);
		tblParentescos.setImmediate(true);
		tblParentescos.setNullSelectionAllowed(true);
		tblParentescos.setNullSelectionItemId(null);
		
		tblParentescos.addListener(new ValueChangeListener() {			 
			
			private static final long serialVersionUID = 6780877045656860061L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblParentescos.getValue() == null;
				if(esModoNuevo){
					tblParentescos.setValue(null);
					limpiar("parentesco");
				}else {
					Item item = tblParentescos.getItem(tblParentescos.getValue());
					parentesco = (Parentesco)item.getItemProperty("ParentescoObj").getValue(); 
					llenarCamposParentesco( );
				}
			}
		});
		
		btnParAgregar.addListener((ClickListener)this);
		btnParRegPersona.addListener((ClickListener)this);		
	}
	
	private void llenarCamposParentesco(){
		flagNuevoParentesco = false ;
		
		for (Persona persona: lstPersonas ) {
			if( parentesco.getPariente() != null)
			if(persona.getId().equals((Long)parentesco.getPariente().getId())){
				cmbParPariente.select(persona);
				break;
			}
		}    
		
		cmbParTipoParentesco.setValue( parentesco.getTipoRelacion() );
		txtParNacionalidad.setValue( parentesco.getPariente().getNacionalidad()!= null ? parentesco.getPariente().getNacionalidad().getNombre() : "" );
		txtParNumero.setValue( parentesco.getPariente().getNroDocumento() );
		txtParTipoDocumento.setValue( parentesco.getPariente().getTipoDocumento() != null ?  parentesco.getPariente().getTipoDocumento().getDescripcion() : "" );
	}
	
	private void registrarPariente(){
		
		parentesco.setPariente( (Persona)cmbParPariente.getValue() );
		parentesco.setTipoRelacion( (Valor)cmbParTipoParentesco.getValue());
		parentesco.setPersona(persona);
		
		if(flagNuevoParentesco)
			parentescoService.crear( parentesco );
		else
			parentescoService.actualizar( parentesco );
		limpiar("parentesco");
		lstparentescos = parentescoService.obtenerParientesXPersona( persona.getId() , true );
		llenaPanelParentesco();
	}
	
	private void llenaPanelParentesco(){
		limpiar("parentesco");
		
		IndexedContainer container = new IndexedContainer();
        container.addContainerProperty("Paterno", String.class, null);
        container.addContainerProperty("Parentesco.id", Long.class, null);
        container.addContainerProperty("ParentescoObj", Parentesco.class, null);
        container.addContainerProperty("Materno", String.class, null);                        
        container.addContainerProperty("Nombre", String.class, null);
        container.addContainerProperty("Parentesco", String.class, null);
        
        if( lstparentescos != null){
	         int con=1;
	         for (Parentesco parentezco: lstparentescos) {
	        	 Item item = container.addItem(con++);
	        	 if(parentezco.getPariente()!=null){
	        		 item.getItemProperty("Paterno").setValue(parentezco.getPariente().getApePaterno());
					 item.getItemProperty("Materno").setValue(parentezco.getPariente().getApeMaterno());
					 item.getItemProperty("Nombre").setValue(parentezco.getPariente().getNombres());
				 }
				 item.getItemProperty("Parentesco").setValue(HarecUtil.valorNombreToEmpty(parentezco.getTipoRelacion()));
				 item.getItemProperty("Parentesco.id").setValue(parentezco.getId());
				 item.getItemProperty("ParentescoObj").setValue(parentezco);
	         }
	    }
        tblParentescos.setContainerDataSource(container);
        tblParentescos.setVisibleColumns(new Object[]{"Paterno","Materno","Nombre","Parentesco"});
	}
	
	/**
	 * Registro de las Identificaciones de la Persona
	 */

	private void inicializaPanelIdentificaciones(){
		 
		cmbIdtTipodoc.setInputPrompt("Tipo de Documento");
		cmbIdtTipodoc.setItemCaptionPropertyId("nombre");
		cmbIdtTipodoc.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoDocPersona));
	
		tblIdentificaciones.setSelectable(true);
		tblIdentificaciones.setImmediate(true);
		tblIdentificaciones.setNullSelectionAllowed(true);
		tblIdentificaciones.setNullSelectionItemId(null);
		
		tblIdentificaciones.addListener(new ValueChangeListener() {			 
		
			private static final long serialVersionUID = 3884305227893934893L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblIdentificaciones.getValue() == null;
				if(esModoNuevo){
					tblIdentificaciones.setValue(null);
					limpiar("identificacion");
				}else {
					Item item = tblIdentificaciones.getItem(tblIdentificaciones.getValue());
					Identificacion obj = identificacionService.obtener((Long)item.getItemProperty("Identificacion.id").getValue()); 
					llenarCamposIdentificacion(obj);
				}
			}
		});
		btnIdtGrabar.addListener((ClickListener)this);
	}

	private void llenaPanelIdentificacion(){		
		limpiar("identificacion");
		 IndexedContainer container = new IndexedContainer();
         container.addContainerProperty("Identificacion.id", Long.class, null);
         container.addContainerProperty("Nombre", String.class, null);
         container.addContainerProperty("Tipo", String.class, null);
         container.addContainerProperty("Numero", String.class, null);
         
         if( lstIdentificaciones != null){
        	 int con=1;
             for (Identificacion identificacion: lstIdentificaciones) {
                     Item item = container.addItem(con++);
    			     item.getItemProperty("Identificacion.id").setValue(identificacion.getId());
    			     item.getItemProperty("Nombre").setValue(identificacion.getPersona().getNombreCompleto());
    			     item.getItemProperty("Tipo").setValue(identificacion.getTipo().getNombre());
    			     item.getItemProperty("Numero").setValue(identificacion.getNumero());
             }	 
         }
         tblIdentificaciones.setContainerDataSource(container);
         tblIdentificaciones.setVisibleColumns(new Object[]{"Nombre","Tipo","Numero"});
	}

	private void llenarCamposIdentificacion(Identificacion identificacion) {
		flagNuevaIdentificacion = false;
		this.identificacion = identificacion;
		txtIdtNumeroDoc.setValue(identificacion.getNumero());
		cmbIdtTipodoc.select(identificacion.getTipo());
	}

	private void registrarIdentificacion(){
		identificacion.setNumero(txtIdtNumeroDoc.getValue().toString());
		identificacion.setTipo((Valor)cmbIdtTipodoc.getValue());
		identificacion.setPersona(persona);		
		if(flagNuevaIdentificacion)
			identificacionService.crear(identificacion);
		else
			identificacionService.actualizar(identificacion);
		limpiar("identificacion");
		lstIdentificaciones = identificacionService.obtenerIdentificacionesXPersona( persona.getId() , true );
		llenaPanelIdentificacion();
	}

	/**
	 * Registro de Razgos de la Persona
	 */
	
	private void inicializaPanelDetalle(){		
		
		cmbDetTipoCabello.setInputPrompt("Tipo de cabello");
		cmbDetTipoCabello.setItemCaptionPropertyId("nombre");
		cmbDetTipoCabello.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoCabello));
		
		cmbDetTipoCeja.setInputPrompt("Tipo de ceja");
		cmbDetTipoCeja.setItemCaptionPropertyId("nombre");
		cmbDetTipoCeja.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoCeja));
		
		cmbDetTipoLabio.setInputPrompt("Tipo de labio");
		cmbDetTipoLabio.setItemCaptionPropertyId("nombre");
		cmbDetTipoLabio.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoLabio));
		
		cmbDetTipoNariz.setInputPrompt("Tipo de nariz");
		cmbDetTipoNariz.setItemCaptionPropertyId("nombre");
		cmbDetTipoNariz.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoNariz));
		
		cmbDetTipoOjo.setInputPrompt("Tipo de ojo");
		cmbDetTipoOjo.setItemCaptionPropertyId("nombre");
		cmbDetTipoOjo.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoOjo));
		
		cmbDetTipoOreja.setInputPrompt("Tipo de oreja");
		cmbDetTipoOreja.setItemCaptionPropertyId("nombre");
		cmbDetTipoOreja.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoOreja));
		
		cmbDetTipoRaza.setInputPrompt("Tipo de raza");
		cmbDetTipoRaza.setItemCaptionPropertyId("nombre");
		cmbDetTipoRaza.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstTipoRaza));
		
		cmbDetColorCabello.setInputPrompt("Color de cabello");
		cmbDetColorCabello.setItemCaptionPropertyId("nombre");
		cmbDetColorCabello.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstColorCabello));
		
		cmbDetColorOjo.setInputPrompt("Color de ojo");
		cmbDetColorOjo.setItemCaptionPropertyId("nombre");
		cmbDetColorOjo.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstColorOjo));
		
		cmbDetPiel.setInputPrompt("Color de piel");
		cmbDetPiel.setItemCaptionPropertyId("nombre");
		cmbDetPiel.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstColorPiel));
		
		cmbDetCorteCabello.setInputPrompt("Corte de cabello");
		cmbDetCorteCabello.setItemCaptionPropertyId("nombre");
		cmbDetCorteCabello.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstCorteCabello));
		
		cmbDetFormaBoca.setInputPrompt("Forma de boca");
		cmbDetFormaBoca.setItemCaptionPropertyId("nombre");
		cmbDetFormaBoca.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstFormaBoca));
		
		cmbDetFormaCara.setInputPrompt("Forma de cara");
		cmbDetFormaCara.setItemCaptionPropertyId("nombre");
		cmbDetFormaCara.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstFormaCara));
		
		cmbDetProfesion.setInputPrompt("Profesiones");
		cmbDetProfesion.setItemCaptionPropertyId("nombre");
		cmbDetProfesion.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstProfesion));
		
		cmbDetContextura.setInputPrompt("Contextura");
		cmbDetContextura.setItemCaptionPropertyId("nombre");
		cmbDetContextura.setContainerDataSource(new BeanItemContainer<Valor>(Valor.class,  lstContextura));
				
		btnDetGrabar.addListener((ClickListener)this);
	}
	
	private void llenaPanelDetalle(){
		if( detalle != null ){
			flagNuevoDetalle = false;
			
			txtDetCalzado.setValue( detalle.getCalzado() );
			txtDetPeso.setValue( detalle.getPeso() );
			txtDetTalla.setValue( detalle.getTalla() );
			
			txaDetRazgoFacial.setValue( StringUtils.isEmpty(detalle.getRasgoFacial()) ? "" : detalle.getRasgoFacial() );
			txaDetSenias.setValue( StringUtils.isEmpty(detalle.getSenas()) ? "" : detalle.getSenas() );
			txaDetVestimenta.setValue( StringUtils.isEmpty(detalle.getVestimenta()) ? "" : detalle.getVestimenta() ); 
			txaDetUltVisto.setValue( StringUtils.isEmpty(detalle.getFechalugarUltvez()) ? "" : detalle.getFechalugarUltvez() );
			
			cmbDetColorCabello.setValue( detalle.getColorCabello() );
			cmbDetColorOjo.setValue( detalle.getColorOjo() );
			cmbDetContextura.setValue( detalle.getContextura() );
			cmbDetCorteCabello.setValue( detalle.getCorteCabello() );
			cmbDetFormaBoca.setValue( detalle.getFormaBoca() );
			cmbDetFormaCara.setValue( detalle.getFormaCara() );
			cmbDetPiel.setValue( detalle.getColorPiel() );
			cmbDetProfesion.setValue( detalle.getProfesion() );
			cmbDetTipoCabello.setValue( detalle.getTipoCabello() );
			cmbDetTipoCeja.setValue( detalle.getTipoCeja() );
			cmbDetTipoLabio.setValue( detalle.getTipoLabio() );
			cmbDetTipoNariz.setValue( detalle.getTipoNariz() );
			cmbDetTipoOjo.setValue( detalle.getTipoOjo() );
			cmbDetTipoOreja.setValue( detalle.getTipoOreja() );
			cmbDetTipoRaza.setValue( detalle.getTipoRaza() );
			
		}else{
			limpiar("detalle");
		}
	}
	
	private void registrarDetallePersona(){
		
		//detalle.setId(id);
		//detalle.setPerNoIdentificado(perNoIdentificado);
		detalle.setPersona(persona);
		detalle.setPeso( !StringUtils.isEmpty( txtDetPeso.getValue().toString() ) ? Double.parseDouble( txtDetPeso.getValue().toString() ) : null );
		detalle.setTalla( !StringUtils.isEmpty( txtDetTalla.getValue().toString() ) ?  Double.parseDouble(txtDetTalla.getValue().toString()) : null );
		detalle.setRasgoFacial( txaDetRazgoFacial.getValue().toString() );
		detalle.setSenas( txaDetSenias.getValue().toString() );
		detalle.setCalzado( txtDetCalzado.getValue().toString() );
		detalle.setVestimenta( txaDetVestimenta.getValue().toString() );
		detalle.setFechalugarUltvez( txaDetUltVisto.getValue().toString() );
		
		detalle.setColorCabello( (Valor)cmbDetColorCabello.getValue());
		detalle.setColorOjo( (Valor)cmbDetColorOjo.getValue());
		detalle.setColorPiel( (Valor)cmbDetPiel.getValue());
		detalle.setContextura( (Valor)cmbDetContextura.getValue());
		detalle.setCorteCabello( (Valor)cmbDetCorteCabello.getValue());
		detalle.setFormaBoca( (Valor)cmbDetFormaBoca.getValue());
		detalle.setFormaCara((Valor)cmbDetFormaCara.getValue());
		detalle.setTipoCabello((Valor)cmbDetTipoCabello.getValue());
		detalle.setProfesion((Valor)cmbDetProfesion.getValue());
		detalle.setTipoCeja((Valor)cmbDetTipoCeja.getValue());
		detalle.setTipoLabio((Valor)cmbDetTipoLabio.getValue());
		detalle.setTipoNariz((Valor)cmbDetTipoNariz.getValue());
		detalle.setTipoOjo((Valor)cmbDetTipoOjo.getValue());
		detalle.setTipoOreja((Valor)cmbDetTipoOreja.getValue());
		detalle.setTipoRaza((Valor)cmbDetTipoRaza.getValue());
		
		if(flagNuevoDetalle){
			logger.debug("Listo para insert ");
			detallePersonaService.crear( detalle );	
		}else{
			logger.debug("Listo para update ");
			detallePersonaService.actualizar( detalle );
		}		
	}	
	
	/**
	 * Registro de las Direcciones de la Persona
	 */

	private void inicializaPanelDirecciones(){
		
		cmbDirDistrito.setInputPrompt("Distrito - Provincia - Departamento");
		cmbDirDistrito.setItemCaptionPropertyId("nombreCompleto");
		cmbDirDistrito.setContainerDataSource(new BeanItemContainer<Distrito>(Distrito.class,  lstDistritos));
		cmbDirDistrito.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
				
		//carga lista de direcciones 
		tblDirDirecciones.setSelectable(true);
		tblDirDirecciones.setImmediate(true);
		tblDirDirecciones.setNullSelectionAllowed(true);
		tblDirDirecciones.setNullSelectionItemId(null);
		
		tblDirDirecciones.addListener(new ValueChangeListener() {			 
			
			private static final long serialVersionUID = -999647809719098424L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblDirDirecciones.getValue() == null;
				if(esModoNuevo){
					tblDirDirecciones.setValue(null);
					limpiar("direccion");
				}else {
					Item item = tblDirDirecciones.getItem(tblDirDirecciones.getValue());
					Direccion obj = direccionService.obtener((Long)item.getItemProperty("Direccion.id").getValue());
					llenarCamposDireccion(obj);
				}
			}
		});				
		btnDirAgregar.addListener((ClickListener)this);
	}
	
	private void llenaPanelDirecciones( ){
		limpiar("direccion");
		
		IndexedContainer container = new IndexedContainer();
		//container.addContainerProperty("id", Long.class, 0l);
        container.addContainerProperty("Direccion", String.class, null);
        container.addContainerProperty("Direccion.id", Long.class, null);
        container.addContainerProperty("Referencia", String.class, null);                        
        container.addContainerProperty("Distrito", String.class, null);
        container.addContainerProperty("Provincia", String.class, null);
        container.addContainerProperty("Departamento", String.class, null);
        
        if(lstDirecciones!=null){
        	int con=1;
	        for (Direccion direccion: lstDirecciones) {
                Item item = container.addItem(con++);
                //item.getItemProperty("id").setValue(direccion.getId() );
                item.getItemProperty("Direccion.id").setValue(direccion.getId() );
                item.getItemProperty("Direccion").setValue(direccion.getDireccion());
			    item.getItemProperty("Referencia").setValue(direccion.getReferencia());
			    item.getItemProperty("Distrito").setValue(direccion.getDistrito().getNombre());
			    item.getItemProperty("Provincia").setValue(direccion.getDistrito().getProvincia().getNombre());
			    item.getItemProperty("Departamento").setValue(direccion.getDistrito().getProvincia().getDepartamento().getNombre());
	        }
        }
        tblDirDirecciones.setContainerDataSource(container);
        tblDirDirecciones.setVisibleColumns(new Object[]{"Direccion","Referencia","Distrito","Provincia","Departamento"});
    }
	
	private void llenarCamposDireccion( Direccion direccion ){
		flagNuevaDireccion = false;
		this.direccion = direccion;
		txtDirDireccion.setValue( direccion.getDireccion()  );
		txtDirReferencia.setValue( direccion.getReferencia() );
				
		for (Distrito ubigeo : lstDistritos) {
			if(direccion.getDistrito() != null)
				if(ubigeo.getId().equals((Long)direccion.getDistrito().getId())){
					cmbDirDistrito.select(ubigeo);
					break;
				}
		}    
	}	

	private void registrarDireccion(){
		direccion.setDireccion( txtDirDireccion.getValue().toString());
		direccion.setReferencia( txtDirReferencia.getValue().toString());
		direccion.setDistrito( (Distrito)cmbDirDistrito.getValue() );
		direccion.setPersona(persona);
		
		if(flagNuevaDireccion)
			direccionService.crear( direccion);
		else
			direccionService.actualizar( direccion );
		lstDirecciones = direccionService.buscar(direccion);
		limpiar("direccion");
		llenaPanelDirecciones();
	}
	
	/**
	 * Registro de los Correos de la Persona
	 */

	private void inicializaPanelCorreo(){
		
		//carga lista de personas 
		tblCorrCorreos.setSelectable(true);
		tblCorrCorreos.setImmediate(true);
		tblCorrCorreos.setNullSelectionAllowed(true);
		tblCorrCorreos.setNullSelectionItemId(null);
	
		tblCorrCorreos.addListener(new ValueChangeListener() {
		
			private static final long serialVersionUID = -4141075478127429622L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblCorrCorreos.getValue() == null;
				if(esModoNuevo){
					tblCorrCorreos.setValue(null);
					limpiar("correo");
				}else {
					Item item = tblCorrCorreos.getItem(tblCorrCorreos.getValue());
					Correo obj = correoService.obtener((Long)item.getItemProperty("correo.id").getValue());
					llenarCamposCorreo(obj);
				}
			}
		});				
		btnCorrNuevo.addListener((ClickListener)this);
	}
	
	private void llenaPanelCorreos(){
		limpiar("correo");
		IndexedContainer container = new IndexedContainer();
		container.addContainerProperty("correo", String.class, null);
		container.addContainerProperty("correo.id", Long.class, null);
		
		int con=1;
		
	    if( lstCorreos != null){
	    	 for (Correo correo: lstCorreos) {
	             Item item = container.addItem(con++);
	             item.getItemProperty("correo").setValue(correo.getCorreo());
	             item.getItemProperty("correo.id").setValue(correo.getId());
	        }
	   		 
	    }
	    tblCorrCorreos.setContainerDataSource(container);
	    tblCorrCorreos.setVisibleColumns(new Object[]{"correo"});
	}

	private void llenarCamposCorreo(Correo correo){
		flagNuevoCorreo = false;
		this.correo = correo ;
		txtCorCorreo.setValue( correo.getCorreo() );
	}
	
	private void registrarCorreo(){
		correo.setPersona(persona);
		correo.setCorreo( txtCorCorreo.getValue().toString() );
		
		if(flagNuevoCorreo)
			correoService.crear(correo);
		else
			correoService.actualizar(correo);
		lstCorreos = correoService.buscar(correo);
		limpiar("correo");
		llenaPanelCorreos();
	}
	
	/**
	 * Registro de las Imagenes de la Persona
	 */

	private void inicializaPanelImagen() {
		btnImgAgregar.addListener((ClickListener)this);
		cmbImgTipo.setInputPrompt("Tipo");
		cmbImgTipo.setCodigoLista(Constante.LISTA.CODIGO.ADJUNTO_TIPO);
		
		uploadImagen.setImmediate(true);
		uploadImagen.setButtonCaption("Adjuntar Imagen");
		uploadImagenAddListener();
		
		tblImagenes.setSelectable(true);
		tblImagenes.setImmediate(true);
		tblImagenes.setNullSelectionAllowed(true);
		tblImagenes.setNullSelectionItemId(null);
		
		tblImagenes.addListener(new ValueChangeListener() {
			
			private static final long serialVersionUID = 6266199513918003163L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				
				boolean esModoNuevo = tblImagenes.getValue() == null;
				limpiar("imagen");
				if(esModoNuevo){
					tblImagenes.setValue(null);
				}else {
					Item item = tblImagenes.getItem(tblImagenes.getValue());
					String ruta = item.getItemProperty("adjunto.ruta").getValue().toString();
					String id = item.getItemProperty("imagen.id").getValue().toString();
					String ext = item.getItemProperty("nombreAdjunto").getValue().toString();
					ext = ext.substring(ext.lastIndexOf('.'), ext.length());
					String cadena = ruta+"/"+ id+ext;
					FileResource resource = new FileResource(new File(cadena), getApplication());
					image = new Embedded(null, resource);
					image.setSizeFull();
					pnlImgImagen.addComponent(image);
				}
			}
		});
		
		proIndImagen.setImmediate(true);
		proIndImagen.setVisible(false);
		
		btnImgCancelar.setVisible(false);
		btnImgCancelar.addListener((ClickListener)this);
		
		
		pnlImagenUpload.addComponent(uploadImagen);
	}
	
	private void validarNombreArchivo(String nombreArchivo){
		nombreArchivo = StringUtils.replace(nombreArchivo, " ","_");
	}
	
	private void uploadImagenAddListener(){
		
        uploadImagen.addListener(new Upload.StartedListener() {
            
			private static final long serialVersionUID = -4333306723016937219L;

			public void uploadStarted(StartedEvent event) {
				if(!HarecUtil.valorNombreToEmpty(cmbImgTipo.getValor()).equals("")){
					proIndImagen.setValue(0f);
					proIndImagen.setVisible(true);
					proIndImagen.setPollingInterval(500);
					uploadImagen.setVisible(false);
					btnImgCancelar.setVisible(true);
				}else {
					uploadImagen.interruptUpload();
					lblImgValor.setValue("Debe seleccionar el tipo de adjunto");
				}
            }
        });

        uploadImagen.addListener(new Upload.ProgressListener() {
            
			private static final long serialVersionUID = 1289208147047286098L;

			public void updateProgress(long readBytes, long contentLength) {
				proIndImagen.setValue(new Float(readBytes / (float) contentLength));
            }
        });

        uploadImagen.addListener(new Upload.SucceededListener() {
            
			private static final long serialVersionUID = -3769903056311972921L;

			public void uploadSucceeded(SucceededEvent event) {
				
				if (event.getLength() > imageSize) {
					uploadImagen.interruptUpload();
					lblImgValor.setValue("La imagen es muy pesada, no se ha podido cargar");
					return;
				}
				
				try {
					String extension = FilenameUtils.getExtension(event.getFilename());
					validarNombreArchivo(event.getFilename());
					AdjuntarReceiver receiver = (AdjuntarReceiver)uploadImagen.getReceiver();
					ByteArrayOutputStream outputStream= receiver.getOutputStream();					
					imagenAdjunta = new Adjunto();
					imagenAdjunta.setNombre(StringUtils.replace(event.getFilename(), " ","_"));
					imagenAdjunta.setTipo((Valor) cmbImgTipo.getValue());
					imagenAdjunta.setOutputStream(outputStream);
					imagenAdjunta.setTipoAdjunto(event.getMIMEType());
					imagenAdjunta.setExtension(extension);
					imagenAdjunta.setFechaCarga(new Date());
					imagenAdjunta.setRuta(rutaDocumento);
					lblImgValor.setValue(imagenAdjunta.getTipo().getNombre()+" - "+imagenAdjunta.getNombre());
				} catch (Exception e) {
					e.printStackTrace();
				}
            }
        });

        uploadImagen.addListener(new Upload.FailedListener() {
            
			private static final long serialVersionUID = 7920554199992944051L;

			public void uploadFailed(FailedEvent event) {
				//Mensaje de Error
            }
        });

        uploadImagen.addListener(new Upload.FinishedListener() {
            
			private static final long serialVersionUID = 6264348242537253603L;

			public void uploadFinished(FinishedEvent event) {
				proIndImagen.setVisible(false);
            	btnImgCancelar.setVisible(false);
                uploadImagen.setVisible(true);
            }
        });
	}
	
	private void registrarImagen(){
		
		//TODO: restringir JPG, PNG, GIF, Desborde de la imagen, el progress bar 
		
		Imagen imagenPer = new Imagen();
		imagenPer.setPersona(persona);
		imagenPer.setAdjunto(imagenAdjunta);
		imagenService.registrarImagenAdjunta(imagenPer);
		
		limpiar("imagen");
		lstImagenes = imagenService.buscar(imagenPer);
		llenaPanelImagenes();
	}
	
	private void llenaPanelImagenes(){
		limpiar("imagen");
		IndexedContainer container = new IndexedContainer();
		container.addContainerProperty("imagen.id", Long.class, null);
		container.addContainerProperty("adjunto.ruta", String.class, null);
		container.addContainerProperty("nombreAdjunto", String.class, null);
		
		int con=1;
		if (lstImagenes != null) {
	    	 for (Imagen imagen: lstImagenes) {
	             Item item = container.addItem(con++);
	             item.getItemProperty("imagen.id").setValue(imagen.getAdjunto().getId());
	             item.getItemProperty("adjunto.ruta").setValue(imagen.getAdjunto().getRuta());
	             item.getItemProperty("nombreAdjunto").setValue(imagen.getAdjunto().getNombre());
	        }
	    }
		
	    tblImagenes.setContainerDataSource(container);
	    tblImagenes.setVisibleColumns(new Object[]{"nombreAdjunto"});
	    
	    
	}
	
	/**
	 * Utilitarios de todos los Paneles
	 */
	
	private void recorrer(String nombre, Map<String, List<Persona>> map, Long objPadre, HierarchicalContainer hwContainer) {
		//ok		
		Item item = null;
		for (Persona per : map.get(nombre)) {			
			item = hwContainer.addItem(per.getId());
			item.getItemProperty("id").setValue(per.getId());
			item.getItemProperty("nombres").setValue(per.getNombres());
			item.getItemProperty("apePaterno").setValue(per.getApePaterno());
			item.getItemProperty("apeMaterno").setValue(per.getApeMaterno());
			item.getItemProperty("padre").setValue(per.getPerPersona() == null ? null : per.getPerPersona() );
			item.getItemProperty("padre.id").setValue(per.getPerPersona() == null ? null : per.getPerPersona().getId());
			//item.getItemProperty("estado").setValue(per.gete == null ? null : per.getEstado());
			
			item.getItemProperty("tipoDoc").setValue(per.getTipoDocumento()!=null ? per.getTipoDocumento().getNombre() : StringUtils.EMPTY);
			item.getItemProperty("nroDoc").setValue(per.getNroDocumento());
			item.getItemProperty("estadoCivil").setValue(per.getEstadoCivil()!=null ? per.getEstadoCivil().getNombre() : StringUtils.EMPTY);
			item.getItemProperty("nacionalidad").setValue(per.getNacionalidad()!=null ? per.getNacionalidad().getNacionalidad() : StringUtils.EMPTY);
			item.getItemProperty("distrito").setValue(per.getLugarNacimiento()!=null ? per.getLugarNacimiento().getNombreCompleto() : StringUtils.EMPTY);
			
			
			if (!nombre.equals(Constante.OPCION.KEY_PADRE)){
				hwContainer.setParent(per.getId(), objPadre);
			}
			if (map.get(per.getId().toString()) != null) {
				recorrer(per.getId().toString(), map, per.getId(),hwContainer);
			} else {
				hwContainer.setChildrenAllowed(per.getId().toString(), false);
			}
		}
	}

	private void habilitarEdicion(boolean flag){
		flagNuevaPersona = !flag;
		//btnEliminar.setVisible(flag);
		if(flag){
			btnPerGrabar.setCaption("Actualizar");
			//Habilita los tabs
			Iterator<Component> i = tabPersona.getComponentIterator();
			while (i.hasNext()) {
			    Component c = (Component) i.next();
			    Tab tab = tabPersona.getTab(c);
			    tab.setEnabled( flag );
			}
			
		}
		else{
			limpiar("persona");
			persona = new Persona();
			detalle = new Detalle();
			btnPerGrabar.setCaption("Crear");
			
			//desactiva tabs
			Iterator<Component> i = tabPersona.getComponentIterator();
			while (i.hasNext()) {
			    Component c = (Component) i.next();
			    Tab tab = tabPersona.getTab(c);
			    tab.setEnabled( false );
			}
			tabPersona.getTab(0).setEnabled(true);
		}
	}
	
	private void refrescar(String nombre){
		habilitarEdicion(false);
		limpiar(nombre);
	}
	
	private void limpiar(String nombre){
		
		if(nombre.equals(PARAM_LIMPIAR_BUSQUEDA)){
			txtBusMaterno.setValue("");
			txtBusNombre.setValue("");
			txtBusNroDoc.setValue("");
			txtBusPaterno.setValue("");
			cmbBusTipoDoc.setValue(null);
			cmbBusEstCivil.setValue(null);
			cmbBusNacionalidad.setValue(null);
			cmbBusDistrito.setValue(null);
			return;
		}	
		
		if(nombre.equals("persona")){
			txtPerNombres.setValue("");
			txtPerApePaterno.setValue("");
			txtPerApeMaterno.setValue("");
			txtPerNumDoc.setValue("");
			dtPerNacimiento.setValue( null );
			rbPerSexo.select( null );
			
			cmbPerEstadoCivil.select(null);
			cmbPerLugarNac.select(null);
			cmbPerNacionalidad.select(null);
			cmbPerPersonaVerdadera.select(null);
			cmbPerTipoDoc.select(null);
			return;
		}	

		if(nombre.equals("detalle")){
			detalle = new Detalle();
			flagNuevoDetalle = true;
			
			txtDetCalzado.setValue("");
			txtDetPeso.setValue("");
			txtDetTalla.setValue("");
			txaDetRazgoFacial.setValue("");
			txaDetSenias.setValue("");
			txaDetUltVisto.setValue("");
			txaDetVestimenta.setValue("");
			cmbDetColorCabello.setValue(null);
			cmbDetColorOjo.setValue(null);
			cmbDetContextura.setValue(null);
			cmbDetCorteCabello.setValue(null);
			cmbDetFormaBoca.setValue(null);
			cmbDetFormaCara.setValue(null);
			cmbDetPiel.setValue(null);
			cmbDetProfesion.setValue(null);
			cmbDetTipoCabello.setValue(null);
			cmbDetTipoCeja.setValue(null);
			cmbDetTipoLabio.setValue(null);
			cmbDetTipoNariz.setValue(null);
			cmbDetTipoOjo.setValue(null);
			cmbDetTipoOreja.setValue(null);
			cmbDetTipoRaza.setValue(null); 
			return;
		}
		
		if( nombre.equals("correo") ){
			flagNuevoCorreo = true ;
			correo = new Correo();
			txtCorCorreo.setValue("");
			return;
		}
		
		if( nombre.equals("direccion") ){
			flagNuevaDireccion = true;
			direccion = new Direccion();
			txtDirReferencia.setValue( "" );
			cmbDirDistrito.setValue( null );
			txtDirDireccion.setValue("");
			return;
		}

		if(nombre.equals("parentesco")){
			flagNuevoParentesco = true;
			parentesco = new Parentesco();
			cmbParPariente.select(null);
			cmbParTipoParentesco.select(null);
			txtParTipoDocumento.setValue("");
			txtParNacionalidad.setValue("");
			txtParNumero.setValue("");
			return;
		}
		if(nombre.equals("identificacion")){
			flagNuevaIdentificacion = true;
			identificacion = new Identificacion();
			txtIdtNumeroDoc.setValue("");
			cmbIdtTipodoc.select(null);
			return;
		}
		
		if(nombre.equals("imagen")){
			if(image!=null)
				pnlImgImagen.removeComponent(image);
			cmbImgTipo.select(null);
			//lblImgTipo.setValue("");
			lblImgValor.setValue("");
			return;
		}
		
	}
	
	@Override
	public void buttonClick(ClickEvent event) {

		if (event.getButton().equals(btnParRegPersona)) {
			cargarWindowRegistro(1L);
		}

		if (event.getButton().equals(btnParAgregar)) {
			registrarPariente();
		}

		if (event.getButton().equals(btnPerGrabar)) {
			registrarPersona();
		}

		if (event.getButton().equals(btnDetGrabar)) {
			registrarDetallePersona();
		}

		if (event.getButton().equals(btnCorrNuevo)) {
			registrarCorreo();
		}

		if (event.getButton().equals(btnDirAgregar)) {
			registrarDireccion();
		}

		if (event.getButton().equals(btnIdtGrabar)) {
			registrarIdentificacion();
		}
		
		if(event.getButton().equals(btnImgCancelar)){
			uploadImagen.interruptUpload();
		}
		
		if(event.getButton().equals(btnImgAgregar)){
			registrarImagen();
		}
		
		if(event.getButton().equals(btnBuscar)){
			buscarPersona();
		}
		
		if(event.getButton().equals(btnLimpiar)){
			limpiar(PARAM_LIMPIAR_BUSQUEDA);
		}
	}
	
	@Override
	public void valueChange(ValueChangeEvent event) {
		if(event.getProperty().equals( cmbParPariente )){
			 
		}
	}

	private void cargarWindowRegistro(Long idParte){
		/*pnlAgregarPersona = new PanelAgregarPersona(idParte);
		Window window=new Window(){
			
			private static final long serialVersionUID = 1L;

		      protected void close() {
		    	  getApplication().getMainWindow().removeWindow(getWindow());
		      }};
		window.setCaption("Registrar Persona");
		window.addComponent(pnlAgregarPersona);
		window.setModal(true);
		window.setResizable(false);
		window.setWidth("550px");
		window.setHeight("-1px");
		getWindow().addWindow(window);*/
	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(false);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// pnlPrincipal
		pnlPrincipal = buildPnlPrincipal();
		mainLayout.addComponent(pnlPrincipal);
		mainLayout.setComponentAlignment(pnlPrincipal, new Alignment(20));
		
		return mainLayout;
	}

	@AutoGenerated
	private VerticalLayout buildPnlPrincipal() {
		// common part: create layout
		pnlPrincipal = new VerticalLayout();
		pnlPrincipal.setStyleName("whiteBackGround");
		pnlPrincipal.setImmediate(false);
		pnlPrincipal.setWidth("-1px");
		pnlPrincipal.setHeight("-1px");
		pnlPrincipal.setMargin(true);
		pnlPrincipal.setSpacing(true);
		
		// verticalLayout_8
		verticalLayout_8 = buildVerticalLayout_8();
		pnlPrincipal.addComponent(verticalLayout_8);
		
		// tabPersona
		tabPersona = buildTabPersona();
		pnlPrincipal.addComponent(tabPersona);
		pnlPrincipal.setComponentAlignment(tabPersona, new Alignment(20));
		
		return pnlPrincipal;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_8() {
		// common part: create layout
		verticalLayout_8 = new VerticalLayout();
		verticalLayout_8.setStyleName("h2");
		verticalLayout_8.setCaption("Filtro de Busqueda de Personas");
		verticalLayout_8.setImmediate(false);
		verticalLayout_8.setWidth("-1px");
		verticalLayout_8.setHeight("-1px");
		verticalLayout_8.setMargin(false);
		verticalLayout_8.setSpacing(true);
		
		// horizontalLayout_3
		horizontalLayout_3 = buildHorizontalLayout_3();
		verticalLayout_8.addComponent(horizontalLayout_3);
		
		// horizontalLayout_8
		horizontalLayout_8 = buildHorizontalLayout_8();
		verticalLayout_8.addComponent(horizontalLayout_8);
		
		// horizontalLayout_9
		horizontalLayout_9 = buildHorizontalLayout_9();
		verticalLayout_8.addComponent(horizontalLayout_9);
		
		// tblPerPersonas
		tblPerPersonas = new TreeTable();
		tblPerPersonas.setImmediate(false);
		tblPerPersonas.setWidth("800px");
		tblPerPersonas.setHeight("200px");
		verticalLayout_8.addComponent(tblPerPersonas);
		
		return verticalLayout_8;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_3() {
		// common part: create layout
		horizontalLayout_3 = new HorizontalLayout();
		horizontalLayout_3.setImmediate(false);
		horizontalLayout_3.setWidth("-1px");
		horizontalLayout_3.setHeight("-1px");
		horizontalLayout_3.setMargin(false);
		horizontalLayout_3.setSpacing(true);
		
		// txtBusNombre
		txtBusNombre = new TextField();
		txtBusNombre.setImmediate(false);
		txtBusNombre.setWidth("150px");
		txtBusNombre.setHeight("-1px");
		txtBusNombre.setInputPrompt("Nombre");
		horizontalLayout_3.addComponent(txtBusNombre);
		
		// txtBusPaterno
		txtBusPaterno = new TextField();
		txtBusPaterno.setImmediate(false);
		txtBusPaterno.setWidth("150px");
		txtBusPaterno.setHeight("-1px");
		txtBusPaterno.setInputPrompt("Paterno");
		horizontalLayout_3.addComponent(txtBusPaterno);
		
		// txtBusMaterno
		txtBusMaterno = new TextField();
		txtBusMaterno.setImmediate(false);
		txtBusMaterno.setWidth("150px");
		txtBusMaterno.setHeight("-1px");
		txtBusMaterno.setInputPrompt("Materno");
		horizontalLayout_3.addComponent(txtBusMaterno);
		
		// cmbBusTipoDoc
		cmbBusTipoDoc = new ComboBoxLOVS();
		cmbBusTipoDoc.setImmediate(false);
		cmbBusTipoDoc.setWidth("-1px");
		cmbBusTipoDoc.setHeight("-1px");
		horizontalLayout_3.addComponent(cmbBusTipoDoc);
		
		// txtBusNroDoc
		txtBusNroDoc = new TextField();
		txtBusNroDoc.setImmediate(false);
		txtBusNroDoc.setWidth("130px");
		txtBusNroDoc.setHeight("-1px");
		txtBusNroDoc.setInputPrompt("Nro. Documento");
		horizontalLayout_3.addComponent(txtBusNroDoc);
		
		return horizontalLayout_3;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_8() {
		// common part: create layout
		horizontalLayout_8 = new HorizontalLayout();
		horizontalLayout_8.setImmediate(false);
		horizontalLayout_8.setWidth("-1px");
		horizontalLayout_8.setHeight("-1px");
		horizontalLayout_8.setMargin(false);
		horizontalLayout_8.setSpacing(true);
		
		// cmbBusEstCivil
		cmbBusEstCivil = new ComboBoxLOVS();
		cmbBusEstCivil.setImmediate(false);
		cmbBusEstCivil.setWidth("-1px");
		cmbBusEstCivil.setHeight("-1px");
		horizontalLayout_8.addComponent(cmbBusEstCivil);
		
		// cmbBusNacionalidad
		cmbBusNacionalidad = new ComboBox();
		cmbBusNacionalidad.setImmediate(false);
		cmbBusNacionalidad.setWidth("-1px");
		cmbBusNacionalidad.setHeight("-1px");
		horizontalLayout_8.addComponent(cmbBusNacionalidad);
		
		// cmbBusDistrito
		cmbBusDistrito = new ComboBox();
		cmbBusDistrito.setImmediate(false);
		cmbBusDistrito.setWidth("300px");
		cmbBusDistrito.setHeight("-1px");
		horizontalLayout_8.addComponent(cmbBusDistrito);
		
		return horizontalLayout_8;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_9() {
		// common part: create layout
		horizontalLayout_9 = new HorizontalLayout();
		horizontalLayout_9.setImmediate(false);
		horizontalLayout_9.setWidth("100.0%");
		horizontalLayout_9.setHeight("-1px");
		horizontalLayout_9.setMargin(false);
		
		// btnBuscar
		btnBuscar = new Button();
		btnBuscar.setCaption("Buscar");
		btnBuscar.setImmediate(true);
		btnBuscar.setWidth("-1px");
		btnBuscar.setHeight("-1px");
		horizontalLayout_9.addComponent(btnBuscar);
		horizontalLayout_9.setComponentAlignment(btnBuscar, new Alignment(6));
		
		// btnLimpiar
		btnLimpiar = new Button();
		btnLimpiar.setCaption("Limpiar");
		btnLimpiar.setImmediate(true);
		btnLimpiar.setWidth("-1px");
		btnLimpiar.setHeight("-1px");
		horizontalLayout_9.addComponent(btnLimpiar);
		
		return horizontalLayout_9;
	}

	@AutoGenerated
	private TabSheet buildTabPersona() {
		// common part: create layout
		tabPersona = new TabSheet();
		tabPersona.setImmediate(true);
		tabPersona.setWidth("800px");
		tabPersona.setHeight("350px");
		
		// verticalLayout_10
		verticalLayout_10 = buildVerticalLayout_10();
		tabPersona.addTab(verticalLayout_10, "Persona", null);
		
		// verticalLayout_4
		verticalLayout_4 = buildVerticalLayout_4();
		tabPersona.addTab(verticalLayout_4, "Parentesco", null);
		
		// verticalLayout_2
		verticalLayout_2 = buildVerticalLayout_2();
		tabPersona.addTab(verticalLayout_2, "Identificación", null);
		
		// verticalLayout_3
		verticalLayout_3 = buildVerticalLayout_3();
		tabPersona.addTab(verticalLayout_3, "Detalle", null);
		
		// verticalLayout_5
		verticalLayout_5 = buildVerticalLayout_5();
		tabPersona.addTab(verticalLayout_5, "Dirección", null);
		
		// verticalLayout_6
		verticalLayout_6 = buildVerticalLayout_6();
		tabPersona.addTab(verticalLayout_6, "Correo", null);
		
		// verticalLayout_7
		verticalLayout_7 = buildVerticalLayout_7();
		tabPersona.addTab(verticalLayout_7, "Imagen", null);
		
		return tabPersona;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_10() {
		// common part: create layout
		verticalLayout_10 = new VerticalLayout();
		verticalLayout_10.setImmediate(false);
		verticalLayout_10.setWidth("-1px");
		verticalLayout_10.setHeight("-1px");
		verticalLayout_10.setMargin(true);
		verticalLayout_10.setSpacing(true);
		
		// pnlPersona
		pnlPersona = buildPnlPersona();
		verticalLayout_10.addComponent(pnlPersona);
		
		// pnlPersona0
		pnlPersona0 = buildPnlPersona0();
		verticalLayout_10.addComponent(pnlPersona0);
		
		// pnlPersona1
		pnlPersona1 = buildPnlPersona1();
		verticalLayout_10.addComponent(pnlPersona1);
		
		// pnlPersona2
		pnlPersona2 = buildPnlPersona2();
		verticalLayout_10.addComponent(pnlPersona2);
		
		// pnlPersona3
		pnlPersona3 = buildPnlPersona3();
		verticalLayout_10.addComponent(pnlPersona3);
		verticalLayout_10.setComponentAlignment(pnlPersona3, new Alignment(20));
		
		return verticalLayout_10;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona() {
		// common part: create layout
		pnlPersona = new HorizontalLayout();
		pnlPersona.setImmediate(false);
		pnlPersona.setWidth("-1px");
		pnlPersona.setHeight("-1px");
		pnlPersona.setMargin(false);
		pnlPersona.setSpacing(true);
		
		// cmbPerTipoDoc
		cmbPerTipoDoc = new ComboBox();
		cmbPerTipoDoc.setCaption("Tipo de Documento:");
		cmbPerTipoDoc.setImmediate(false);
		cmbPerTipoDoc.setWidth("-1px");
		cmbPerTipoDoc.setHeight("-1px");
		cmbPerTipoDoc.setRequired(true);
		pnlPersona.addComponent(cmbPerTipoDoc);
		
		// txtPerNumDoc
		txtPerNumDoc = new TextField();
		txtPerNumDoc.setCaption("Numero de Documento:");
		txtPerNumDoc.setImmediate(false);
		txtPerNumDoc.setWidth("-1px");
		txtPerNumDoc.setHeight("-1px");
		txtPerNumDoc.setRequired(true);
		txtPerNumDoc.setInputPrompt("Nro. de Documento");
		txtPerNumDoc.setMaxLength(20);
		pnlPersona.addComponent(txtPerNumDoc);
		
		return pnlPersona;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona0() {
		// common part: create layout
		pnlPersona0 = new HorizontalLayout();
		pnlPersona0.setImmediate(false);
		pnlPersona0.setWidth("-1px");
		pnlPersona0.setHeight("-1px");
		pnlPersona0.setMargin(false);
		pnlPersona0.setSpacing(true);
		
		// txtPerNombres
		txtPerNombres = new TextField();
		txtPerNombres.setCaption("Nombres:");
		txtPerNombres.setImmediate(false);
		txtPerNombres.setWidth("200px");
		txtPerNombres.setHeight("-1px");
		txtPerNombres.setRequired(true);
		txtPerNombres.setInputPrompt("Nombres");
		txtPerNombres.setMaxLength(150);
		pnlPersona0.addComponent(txtPerNombres);
		
		// txtPerApePaterno
		txtPerApePaterno = new TextField();
		txtPerApePaterno.setCaption("Apellido Paterno:");
		txtPerApePaterno.setImmediate(false);
		txtPerApePaterno.setWidth("200px");
		txtPerApePaterno.setHeight("-1px");
		txtPerApePaterno.setRequired(true);
		txtPerApePaterno.setInputPrompt("Apellido Paterno");
		txtPerApePaterno.setMaxLength(100);
		pnlPersona0.addComponent(txtPerApePaterno);
		
		// txtPerApeMaterno
		txtPerApeMaterno = new TextField();
		txtPerApeMaterno.setCaption("Apellido Materno:");
		txtPerApeMaterno.setImmediate(false);
		txtPerApeMaterno.setWidth("200px");
		txtPerApeMaterno.setHeight("-1px");
		txtPerApeMaterno.setInputPrompt("Apellido Materno");
		txtPerApeMaterno.setMaxLength(100);
		pnlPersona0.addComponent(txtPerApeMaterno);
		
		return pnlPersona0;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona1() {
		// common part: create layout
		pnlPersona1 = new HorizontalLayout();
		pnlPersona1.setImmediate(false);
		pnlPersona1.setWidth("-1px");
		pnlPersona1.setHeight("-1px");
		pnlPersona1.setMargin(false);
		pnlPersona1.setSpacing(true);
		
		// cmbPerEstadoCivil
		cmbPerEstadoCivil = new ComboBox();
		cmbPerEstadoCivil.setCaption("Estado Civil:");
		cmbPerEstadoCivil.setImmediate(false);
		cmbPerEstadoCivil.setWidth("-1px");
		cmbPerEstadoCivil.setHeight("-1px");
		pnlPersona1.addComponent(cmbPerEstadoCivil);
		
		// dtPerNacimiento
		dtPerNacimiento = new PopupDateField();
		dtPerNacimiento.setCaption("Fecha de Nacimiento:");
		dtPerNacimiento.setImmediate(false);
		dtPerNacimiento.setWidth("150px");
		dtPerNacimiento.setHeight("-1px");
		dtPerNacimiento.setResolution(4);
		pnlPersona1.addComponent(dtPerNacimiento);
		
		// rbPerSexo
		rbPerSexo = new OptionGroup();
		rbPerSexo.setStyleName("horizontal");
		rbPerSexo.setCaption("Sexo");
		rbPerSexo.setImmediate(false);
		rbPerSexo.setWidth("-1px");
		rbPerSexo.setHeight("25px");
		rbPerSexo.setRequired(true);
		pnlPersona1.addComponent(rbPerSexo);
		
		return pnlPersona1;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona2() {
		// common part: create layout
		pnlPersona2 = new HorizontalLayout();
		pnlPersona2.setImmediate(false);
		pnlPersona2.setWidth("-1px");
		pnlPersona2.setHeight("-1px");
		pnlPersona2.setMargin(false);
		pnlPersona2.setSpacing(true);
		
		// cmbPerNacionalidad
		cmbPerNacionalidad = new ComboBox();
		cmbPerNacionalidad.setCaption("Nacionalidad:");
		cmbPerNacionalidad.setImmediate(false);
		cmbPerNacionalidad.setWidth("200px");
		cmbPerNacionalidad.setHeight("-1px");
		cmbPerNacionalidad.setRequired(true);
		pnlPersona2.addComponent(cmbPerNacionalidad);
		
		// cmbPerLugarNac
		cmbPerLugarNac = new ComboBox();
		cmbPerLugarNac.setCaption("Lugar de Nacimiento:");
		cmbPerLugarNac.setImmediate(false);
		cmbPerLugarNac.setWidth("280px");
		cmbPerLugarNac.setHeight("-1px");
		pnlPersona2.addComponent(cmbPerLugarNac);
		
		// cmbPerPersonaVerdadera
		cmbPerPersonaVerdadera = new ComboBox();
		cmbPerPersonaVerdadera.setCaption("Persona Verdadera");
		cmbPerPersonaVerdadera.setImmediate(false);
		cmbPerPersonaVerdadera.setWidth("-1px");
		cmbPerPersonaVerdadera.setHeight("-1px");
		pnlPersona2.addComponent(cmbPerPersonaVerdadera);
		
		return pnlPersona2;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona3() {
		// common part: create layout
		pnlPersona3 = new HorizontalLayout();
		pnlPersona3.setImmediate(false);
		pnlPersona3.setWidth("-1px");
		pnlPersona3.setHeight("-1px");
		pnlPersona3.setMargin(true);
		pnlPersona3.setSpacing(true);
		
		// btnPerGrabar
		btnPerGrabar = new Button();
		btnPerGrabar.setCaption("Grabar");
		btnPerGrabar.setImmediate(true);
		btnPerGrabar.setWidth("100px");
		btnPerGrabar.setHeight("-1px");
		pnlPersona3.addComponent(btnPerGrabar);
		
		// btnCancelar
		btnCancelar = new Button();
		btnCancelar.setCaption("Cancelar");
		btnCancelar.setImmediate(true);
		btnCancelar.setWidth("100px");
		btnCancelar.setHeight("-1px");
		pnlPersona3.addComponent(btnCancelar);
		
		return pnlPersona3;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_4() {
		// common part: create layout
		verticalLayout_4 = new VerticalLayout();
		verticalLayout_4.setImmediate(false);
		verticalLayout_4.setWidth("-1px");
		verticalLayout_4.setHeight("-1px");
		verticalLayout_4.setMargin(true);
		verticalLayout_4.setSpacing(true);
		
		// verticalLayout_11
		verticalLayout_11 = buildVerticalLayout_11();
		verticalLayout_4.addComponent(verticalLayout_11);
		verticalLayout_4.setComponentAlignment(verticalLayout_11,
				new Alignment(6));
		
		return verticalLayout_4;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_11() {
		// common part: create layout
		verticalLayout_11 = new VerticalLayout();
		verticalLayout_11.setImmediate(false);
		verticalLayout_11.setWidth("-1px");
		verticalLayout_11.setHeight("-1px");
		verticalLayout_11.setMargin(false);
		verticalLayout_11.setSpacing(true);
		
		// verticalLayout_9
		verticalLayout_9 = buildVerticalLayout_9();
		verticalLayout_11.addComponent(verticalLayout_9);
		
		// tblParentescos
		tblParentescos = new Table();
		tblParentescos.setImmediate(false);
		tblParentescos.setWidth("700px");
		tblParentescos.setHeight("150px");
		verticalLayout_11.addComponent(tblParentescos);
		
		return verticalLayout_11;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_9() {
		// common part: create layout
		verticalLayout_9 = new VerticalLayout();
		verticalLayout_9.setImmediate(false);
		verticalLayout_9.setWidth("-1px");
		verticalLayout_9.setHeight("-1px");
		verticalLayout_9.setMargin(false);
		
		// pnlParentesco1
		pnlParentesco1 = buildPnlParentesco1();
		verticalLayout_9.addComponent(pnlParentesco1);
		
		// pnlParentesco2
		pnlParentesco2 = buildPnlParentesco2();
		verticalLayout_9.addComponent(pnlParentesco2);
		
		return verticalLayout_9;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlParentesco1() {
		// common part: create layout
		pnlParentesco1 = new HorizontalLayout();
		pnlParentesco1.setImmediate(false);
		pnlParentesco1.setWidth("700px");
		pnlParentesco1.setHeight("-1px");
		pnlParentesco1.setMargin(false);
		pnlParentesco1.setSpacing(true);
		
		// horizontalLayout_7
		horizontalLayout_7 = buildHorizontalLayout_7();
		pnlParentesco1.addComponent(horizontalLayout_7);
		
		// btnParAgregar
		btnParAgregar = new Button();
		btnParAgregar.setCaption("Agregar Pariente");
		btnParAgregar.setImmediate(true);
		btnParAgregar.setWidth("-1px");
		btnParAgregar.setHeight("-1px");
		pnlParentesco1.addComponent(btnParAgregar);
		pnlParentesco1.setComponentAlignment(btnParAgregar, new Alignment(10));
		
		return pnlParentesco1;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_7() {
		// common part: create layout
		horizontalLayout_7 = new HorizontalLayout();
		horizontalLayout_7.setImmediate(false);
		horizontalLayout_7.setWidth("-1px");
		horizontalLayout_7.setHeight("-1px");
		horizontalLayout_7.setMargin(false);
		horizontalLayout_7.setSpacing(true);
		
		// cmbParTipoParentesco
		cmbParTipoParentesco = new ComboBox();
		cmbParTipoParentesco.setCaption("Tipo de Parentezco:");
		cmbParTipoParentesco.setImmediate(false);
		cmbParTipoParentesco.setWidth("-1px");
		cmbParTipoParentesco.setHeight("-1px");
		cmbParTipoParentesco.setRequired(true);
		horizontalLayout_7.addComponent(cmbParTipoParentesco);
		
		// cmbParPariente
		cmbParPariente = new ComboBox();
		cmbParPariente.setCaption("Persona Pariente:");
		cmbParPariente.setImmediate(false);
		cmbParPariente.setWidth("300px");
		cmbParPariente.setHeight("-1px");
		cmbParPariente.setRequired(true);
		horizontalLayout_7.addComponent(cmbParPariente);
		
		// btnParRegPersona
		btnParRegPersona = new Button();
		btnParRegPersona.setCaption("Button");
		btnParRegPersona.setImmediate(true);
		btnParRegPersona.setWidth("-1px");
		btnParRegPersona.setHeight("-1px");
		horizontalLayout_7.addComponent(btnParRegPersona);
		horizontalLayout_7.setComponentAlignment(btnParRegPersona,
				new Alignment(9));
		
		return horizontalLayout_7;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlParentesco2() {
		// common part: create layout
		pnlParentesco2 = new HorizontalLayout();
		pnlParentesco2.setStyleName("h2");
		pnlParentesco2.setCaption("Datos del Pariente");
		pnlParentesco2.setImmediate(false);
		pnlParentesco2.setWidth("-1px");
		pnlParentesco2.setHeight("-1px");
		pnlParentesco2.setMargin(false);
		pnlParentesco2.setSpacing(true);
		
		// txtParTipoDocumento
		txtParTipoDocumento = new TextField();
		txtParTipoDocumento.setCaption("Tipo de Documento");
		txtParTipoDocumento.setImmediate(false);
		txtParTipoDocumento.setWidth("-1px");
		txtParTipoDocumento.setHeight("-1px");
		pnlParentesco2.addComponent(txtParTipoDocumento);
		
		// txtParNumero
		txtParNumero = new TextField();
		txtParNumero.setCaption("Número");
		txtParNumero.setImmediate(false);
		txtParNumero.setWidth("-1px");
		txtParNumero.setHeight("-1px");
		pnlParentesco2.addComponent(txtParNumero);
		
		// txtParNacionalidad
		txtParNacionalidad = new TextField();
		txtParNacionalidad.setCaption("Nacionalidad");
		txtParNacionalidad.setImmediate(false);
		txtParNacionalidad.setWidth("-1px");
		txtParNacionalidad.setHeight("-1px");
		pnlParentesco2.addComponent(txtParNacionalidad);
		
		return pnlParentesco2;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_2() {
		// common part: create layout
		verticalLayout_2 = new VerticalLayout();
		verticalLayout_2.setImmediate(false);
		verticalLayout_2.setWidth("-1px");
		verticalLayout_2.setHeight("-1px");
		verticalLayout_2.setMargin(true);
		verticalLayout_2.setSpacing(true);
		
		// pnlIdentificacion1
		pnlIdentificacion1 = buildPnlIdentificacion1();
		verticalLayout_2.addComponent(pnlIdentificacion1);
		
		// tblIdentificaciones
		tblIdentificaciones = new Table();
		tblIdentificaciones.setImmediate(false);
		tblIdentificaciones.setWidth("700px");
		tblIdentificaciones.setHeight("200px");
		verticalLayout_2.addComponent(tblIdentificaciones);
		
		return verticalLayout_2;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlIdentificacion1() {
		// common part: create layout
		pnlIdentificacion1 = new HorizontalLayout();
		pnlIdentificacion1.setImmediate(false);
		pnlIdentificacion1.setWidth("700px");
		pnlIdentificacion1.setHeight("-1px");
		pnlIdentificacion1.setMargin(false);
		pnlIdentificacion1.setSpacing(true);
		
		// horizontalLayout_2
		horizontalLayout_2 = buildHorizontalLayout_2();
		pnlIdentificacion1.addComponent(horizontalLayout_2);
		
		// btnIdtGrabar
		btnIdtGrabar = new Button();
		btnIdtGrabar.setCaption("Agregar Documento");
		btnIdtGrabar.setImmediate(true);
		btnIdtGrabar.setWidth("-1px");
		btnIdtGrabar.setHeight("-1px");
		pnlIdentificacion1.addComponent(btnIdtGrabar);
		pnlIdentificacion1.setComponentAlignment(btnIdtGrabar,
				new Alignment(10));
		
		return pnlIdentificacion1;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_2() {
		// common part: create layout
		horizontalLayout_2 = new HorizontalLayout();
		horizontalLayout_2.setImmediate(false);
		horizontalLayout_2.setWidth("-1px");
		horizontalLayout_2.setHeight("-1px");
		horizontalLayout_2.setMargin(false);
		horizontalLayout_2.setSpacing(true);
		
		// cmbIdtTipodoc
		cmbIdtTipodoc = new ComboBox();
		cmbIdtTipodoc.setCaption("Tipo de Documento");
		cmbIdtTipodoc.setImmediate(false);
		cmbIdtTipodoc.setWidth("-1px");
		cmbIdtTipodoc.setHeight("-1px");
		cmbIdtTipodoc.setRequired(true);
		horizontalLayout_2.addComponent(cmbIdtTipodoc);
		
		// txtIdtNumeroDoc
		txtIdtNumeroDoc = new TextField();
		txtIdtNumeroDoc.setCaption("Numero");
		txtIdtNumeroDoc.setImmediate(false);
		txtIdtNumeroDoc.setWidth("200px");
		txtIdtNumeroDoc.setHeight("-1px");
		txtIdtNumeroDoc.setRequired(true);
		txtIdtNumeroDoc.setInputPrompt("Número de Documento");
		horizontalLayout_2.addComponent(txtIdtNumeroDoc);
		
		return horizontalLayout_2;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_3() {
		// common part: create layout
		verticalLayout_3 = new VerticalLayout();
		verticalLayout_3.setCaption("Registrar los Rasgos de la Persona");
		verticalLayout_3.setImmediate(false);
		verticalLayout_3.setWidth("100.0%");
		verticalLayout_3.setHeight("-1px");
		verticalLayout_3.setMargin(true);
		verticalLayout_3.setSpacing(true);
		
		// pnlPersona4
		pnlPersona4 = buildPnlPersona4();
		verticalLayout_3.addComponent(pnlPersona4);
		
		// pnlPersona5
		pnlPersona5 = buildPnlPersona5();
		verticalLayout_3.addComponent(pnlPersona5);
		
		// pnlPersona6
		pnlPersona6 = buildPnlPersona6();
		verticalLayout_3.addComponent(pnlPersona6);
		
		// pnlPersona7
		pnlPersona7 = buildPnlPersona7();
		verticalLayout_3.addComponent(pnlPersona7);
		
		// pnlPersona8
		pnlPersona8 = buildPnlPersona8();
		verticalLayout_3.addComponent(pnlPersona8);
		
		// pnlPersona9
		pnlPersona9 = buildPnlPersona9();
		verticalLayout_3.addComponent(pnlPersona9);
		
		// pnlPersona10
		pnlPersona10 = buildPnlPersona10();
		verticalLayout_3.addComponent(pnlPersona10);
		verticalLayout_3.setComponentAlignment(pnlPersona10, new Alignment(20));
		
		return verticalLayout_3;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona4() {
		// common part: create layout
		pnlPersona4 = new HorizontalLayout();
		pnlPersona4.setImmediate(false);
		pnlPersona4.setWidth("-1px");
		pnlPersona4.setHeight("-1px");
		pnlPersona4.setMargin(false);
		pnlPersona4.setSpacing(true);
		
		// txtDetTalla
		txtDetTalla = new TextField();
		txtDetTalla.setCaption("Talla");
		txtDetTalla.setImmediate(false);
		txtDetTalla.setWidth("-1px");
		txtDetTalla.setHeight("-1px");
		txtDetTalla.setInputPrompt("Talla");
		txtDetTalla.setMaxLength(6);
		txtDetTalla.setNullSettingAllowed(true);
		pnlPersona4.addComponent(txtDetTalla);
		
		// txtDetPeso
		txtDetPeso = new TextField();
		txtDetPeso.setCaption("Peso");
		txtDetPeso.setImmediate(false);
		txtDetPeso.setWidth("-1px");
		txtDetPeso.setHeight("-1px");
		txtDetPeso.setInputPrompt("Peso");
		txtDetPeso.setMaxLength(6);
		txtDetPeso.setNullSettingAllowed(true);
		pnlPersona4.addComponent(txtDetPeso);
		
		// cmbDetTipoCeja
		cmbDetTipoCeja = new ComboBox();
		cmbDetTipoCeja.setCaption("Tipo ceja");
		cmbDetTipoCeja.setImmediate(false);
		cmbDetTipoCeja.setWidth("-1px");
		cmbDetTipoCeja.setHeight("24px");
		pnlPersona4.addComponent(cmbDetTipoCeja);
		
		// cmbDetTipoOreja
		cmbDetTipoOreja = new ComboBox();
		cmbDetTipoOreja.setCaption("Tipo oreja");
		cmbDetTipoOreja.setImmediate(false);
		cmbDetTipoOreja.setWidth("-1px");
		cmbDetTipoOreja.setHeight("-1px");
		pnlPersona4.addComponent(cmbDetTipoOreja);
		
		return pnlPersona4;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona5() {
		// common part: create layout
		pnlPersona5 = new HorizontalLayout();
		pnlPersona5.setImmediate(false);
		pnlPersona5.setWidth("-1px");
		pnlPersona5.setHeight("-1px");
		pnlPersona5.setMargin(false);
		pnlPersona5.setSpacing(true);
		
		// cmbDetPiel
		cmbDetPiel = new ComboBox();
		cmbDetPiel.setCaption("Color piel");
		cmbDetPiel.setImmediate(false);
		cmbDetPiel.setWidth("-1px");
		cmbDetPiel.setHeight("-1px");
		pnlPersona5.addComponent(cmbDetPiel);
		
		// cmbDetContextura
		cmbDetContextura = new ComboBox();
		cmbDetContextura.setCaption("Contextura");
		cmbDetContextura.setImmediate(false);
		cmbDetContextura.setWidth("-1px");
		cmbDetContextura.setHeight("-1px");
		pnlPersona5.addComponent(cmbDetContextura);
		
		// cmbDetTipoCabello
		cmbDetTipoCabello = new ComboBox();
		cmbDetTipoCabello.setCaption("Tipo cabello");
		cmbDetTipoCabello.setImmediate(false);
		cmbDetTipoCabello.setWidth("-1px");
		cmbDetTipoCabello.setHeight("-1px");
		pnlPersona5.addComponent(cmbDetTipoCabello);
		
		// cmbDetTipoRaza
		cmbDetTipoRaza = new ComboBox();
		cmbDetTipoRaza.setCaption("Tipo raza");
		cmbDetTipoRaza.setImmediate(false);
		cmbDetTipoRaza.setWidth("-1px");
		cmbDetTipoRaza.setHeight("-1px");
		pnlPersona5.addComponent(cmbDetTipoRaza);
		
		return pnlPersona5;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona6() {
		// common part: create layout
		pnlPersona6 = new HorizontalLayout();
		pnlPersona6.setImmediate(false);
		pnlPersona6.setWidth("-1px");
		pnlPersona6.setHeight("-1px");
		pnlPersona6.setMargin(false);
		pnlPersona6.setSpacing(true);
		
		// cmbDetColorCabello
		cmbDetColorCabello = new ComboBox();
		cmbDetColorCabello.setCaption("Color cabello");
		cmbDetColorCabello.setImmediate(false);
		cmbDetColorCabello.setWidth("-1px");
		cmbDetColorCabello.setHeight("-1px");
		pnlPersona6.addComponent(cmbDetColorCabello);
		
		// cmbDetCorteCabello
		cmbDetCorteCabello = new ComboBox();
		cmbDetCorteCabello.setCaption("Corte cabello");
		cmbDetCorteCabello.setImmediate(false);
		cmbDetCorteCabello.setWidth("-1px");
		cmbDetCorteCabello.setHeight("-1px");
		pnlPersona6.addComponent(cmbDetCorteCabello);
		
		// cmbDetTipoOjo
		cmbDetTipoOjo = new ComboBox();
		cmbDetTipoOjo.setCaption("Tipo ojo");
		cmbDetTipoOjo.setImmediate(false);
		cmbDetTipoOjo.setWidth("-1px");
		cmbDetTipoOjo.setHeight("-1px");
		pnlPersona6.addComponent(cmbDetTipoOjo);
		
		// cmbDetColorOjo
		cmbDetColorOjo = new ComboBox();
		cmbDetColorOjo.setCaption("Color ojo");
		cmbDetColorOjo.setImmediate(false);
		cmbDetColorOjo.setWidth("-1px");
		cmbDetColorOjo.setHeight("-1px");
		pnlPersona6.addComponent(cmbDetColorOjo);
		
		return pnlPersona6;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona7() {
		// common part: create layout
		pnlPersona7 = new HorizontalLayout();
		pnlPersona7.setImmediate(false);
		pnlPersona7.setWidth("-1px");
		pnlPersona7.setHeight("-1px");
		pnlPersona7.setMargin(false);
		pnlPersona7.setSpacing(true);
		
		// cmbDetTipoNariz
		cmbDetTipoNariz = new ComboBox();
		cmbDetTipoNariz.setCaption("Tipo nariz");
		cmbDetTipoNariz.setImmediate(false);
		cmbDetTipoNariz.setWidth("-1px");
		cmbDetTipoNariz.setHeight("-1px");
		pnlPersona7.addComponent(cmbDetTipoNariz);
		
		// cmbDetFormaCara
		cmbDetFormaCara = new ComboBox();
		cmbDetFormaCara.setCaption("Forma cara");
		cmbDetFormaCara.setImmediate(false);
		cmbDetFormaCara.setWidth("-1px");
		cmbDetFormaCara.setHeight("-1px");
		pnlPersona7.addComponent(cmbDetFormaCara);
		
		// cmbDetTipoLabio
		cmbDetTipoLabio = new ComboBox();
		cmbDetTipoLabio.setCaption("Tipo labio");
		cmbDetTipoLabio.setImmediate(false);
		cmbDetTipoLabio.setWidth("-1px");
		cmbDetTipoLabio.setHeight("-1px");
		pnlPersona7.addComponent(cmbDetTipoLabio);
		
		// cmbDetFormaBoca
		cmbDetFormaBoca = new ComboBox();
		cmbDetFormaBoca.setCaption("Forma boca");
		cmbDetFormaBoca.setImmediate(false);
		cmbDetFormaBoca.setWidth("-1px");
		cmbDetFormaBoca.setHeight("-1px");
		pnlPersona7.addComponent(cmbDetFormaBoca);
		
		return pnlPersona7;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona8() {
		// common part: create layout
		pnlPersona8 = new HorizontalLayout();
		pnlPersona8.setImmediate(false);
		pnlPersona8.setWidth("-1px");
		pnlPersona8.setHeight("-1px");
		pnlPersona8.setMargin(false);
		pnlPersona8.setSpacing(true);
		
		// txtDetCalzado
		txtDetCalzado = new TextField();
		txtDetCalzado.setCaption("Calzado");
		txtDetCalzado.setImmediate(false);
		txtDetCalzado.setWidth("-1px");
		txtDetCalzado.setHeight("-1px");
		txtDetCalzado.setNullSettingAllowed(true);
		pnlPersona8.addComponent(txtDetCalzado);
		
		// cmbDetProfesion
		cmbDetProfesion = new ComboBox();
		cmbDetProfesion.setCaption("Profesión");
		cmbDetProfesion.setImmediate(false);
		cmbDetProfesion.setWidth("-1px");
		cmbDetProfesion.setHeight("-1px");
		pnlPersona8.addComponent(cmbDetProfesion);
		
		// txaDetSenias
		txaDetSenias = new TextArea();
		txaDetSenias.setCaption("Señas");
		txaDetSenias.setImmediate(false);
		txaDetSenias.setWidth("153px");
		txaDetSenias.setHeight("34px");
		txaDetSenias.setNullSettingAllowed(true);
		pnlPersona8.addComponent(txaDetSenias);
		
		return pnlPersona8;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona9() {
		// common part: create layout
		pnlPersona9 = new HorizontalLayout();
		pnlPersona9.setImmediate(false);
		pnlPersona9.setWidth("-1px");
		pnlPersona9.setHeight("-1px");
		pnlPersona9.setMargin(false);
		pnlPersona9.setSpacing(true);
		
		// txaDetVestimenta
		txaDetVestimenta = new TextArea();
		txaDetVestimenta.setCaption("Vestimenta");
		txaDetVestimenta.setImmediate(false);
		txaDetVestimenta.setWidth("200px");
		txaDetVestimenta.setHeight("50px");
		txaDetVestimenta.setNullSettingAllowed(true);
		pnlPersona9.addComponent(txaDetVestimenta);
		
		// txaDetRazgoFacial
		txaDetRazgoFacial = new TextArea();
		txaDetRazgoFacial.setCaption("Razgo facial");
		txaDetRazgoFacial.setImmediate(false);
		txaDetRazgoFacial.setWidth("200px");
		txaDetRazgoFacial.setHeight("50px");
		txaDetRazgoFacial.setNullSettingAllowed(true);
		pnlPersona9.addComponent(txaDetRazgoFacial);
		
		// txaDetUltVisto
		txaDetUltVisto = new TextArea();
		txaDetUltVisto.setCaption("Ult. vez visto");
		txaDetUltVisto.setImmediate(false);
		txaDetUltVisto.setWidth("200px");
		txaDetUltVisto.setHeight("50px");
		txaDetUltVisto.setNullSettingAllowed(true);
		pnlPersona9.addComponent(txaDetUltVisto);
		
		return pnlPersona9;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPersona10() {
		// common part: create layout
		pnlPersona10 = new HorizontalLayout();
		pnlPersona10.setImmediate(false);
		pnlPersona10.setWidth("-1px");
		pnlPersona10.setHeight("-1px");
		pnlPersona10.setMargin(true);
		pnlPersona10.setSpacing(true);
		
		// btnDetGrabar
		btnDetGrabar = new Button();
		btnDetGrabar.setCaption("Grabar");
		btnDetGrabar.setImmediate(true);
		btnDetGrabar.setWidth("100px");
		btnDetGrabar.setHeight("-1px");
		pnlPersona10.addComponent(btnDetGrabar);
		
		return pnlPersona10;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_5() {
		// common part: create layout
		verticalLayout_5 = new VerticalLayout();
		verticalLayout_5.setImmediate(false);
		verticalLayout_5.setWidth("-1px");
		verticalLayout_5.setHeight("-1px");
		verticalLayout_5.setMargin(true);
		verticalLayout_5.setSpacing(true);
		
		// pnlDireccion1
		pnlDireccion1 = buildPnlDireccion1();
		verticalLayout_5.addComponent(pnlDireccion1);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		verticalLayout_5.addComponent(horizontalLayout_1);
		
		// tblDirDirecciones
		tblDirDirecciones = new Table();
		tblDirDirecciones.setImmediate(false);
		tblDirDirecciones.setWidth("730px");
		tblDirDirecciones.setHeight("200px");
		verticalLayout_5.addComponent(tblDirDirecciones);
		
		return verticalLayout_5;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlDireccion1() {
		// common part: create layout
		pnlDireccion1 = new HorizontalLayout();
		pnlDireccion1.setImmediate(false);
		pnlDireccion1.setWidth("730px");
		pnlDireccion1.setHeight("-1px");
		pnlDireccion1.setMargin(false);
		
		// horizontalLayout_4
		horizontalLayout_4 = buildHorizontalLayout_4();
		pnlDireccion1.addComponent(horizontalLayout_4);
		
		return pnlDireccion1;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_4() {
		// common part: create layout
		horizontalLayout_4 = new HorizontalLayout();
		horizontalLayout_4.setImmediate(false);
		horizontalLayout_4.setWidth("-1px");
		horizontalLayout_4.setHeight("-1px");
		horizontalLayout_4.setMargin(false);
		horizontalLayout_4.setSpacing(true);
		
		// cmbDirDistrito
		cmbDirDistrito = new ComboBox();
		cmbDirDistrito.setCaption("Distrito");
		cmbDirDistrito.setImmediate(false);
		cmbDirDistrito.setWidth("-1px");
		cmbDirDistrito.setHeight("-1px");
		cmbDirDistrito.setRequired(true);
		horizontalLayout_4.addComponent(cmbDirDistrito);
		
		return horizontalLayout_4;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("-1px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		
		// txtDirDireccion
		txtDirDireccion = new TextField();
		txtDirDireccion.setCaption("Dirección");
		txtDirDireccion.setImmediate(false);
		txtDirDireccion.setWidth("-1px");
		txtDirDireccion.setHeight("-1px");
		txtDirDireccion.setRequired(true);
		horizontalLayout_1.addComponent(txtDirDireccion);
		
		// txtDirReferencia
		txtDirReferencia = new TextField();
		txtDirReferencia.setCaption("Referencia");
		txtDirReferencia.setImmediate(false);
		txtDirReferencia.setWidth("320px");
		txtDirReferencia.setHeight("-1px");
		horizontalLayout_1.addComponent(txtDirReferencia);
		
		// btnDirAgregar
		btnDirAgregar = new Button();
		btnDirAgregar.setCaption("Agregar");
		btnDirAgregar.setImmediate(true);
		btnDirAgregar.setWidth("-1px");
		btnDirAgregar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnDirAgregar);
		horizontalLayout_1.setComponentAlignment(btnDirAgregar, new Alignment(
				10));
		
		return horizontalLayout_1;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_6() {
		// common part: create layout
		verticalLayout_6 = new VerticalLayout();
		verticalLayout_6.setImmediate(false);
		verticalLayout_6.setWidth("-1px");
		verticalLayout_6.setHeight("-1px");
		verticalLayout_6.setMargin(true);
		verticalLayout_6.setSpacing(true);
		
		// horizontalLayout_5
		horizontalLayout_5 = buildHorizontalLayout_5();
		verticalLayout_6.addComponent(horizontalLayout_5);
		
		// tblCorrCorreos
		tblCorrCorreos = new Table();
		tblCorrCorreos.setImmediate(false);
		tblCorrCorreos.setWidth("720px");
		tblCorrCorreos.setHeight("200px");
		verticalLayout_6.addComponent(tblCorrCorreos);
		
		return verticalLayout_6;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_5() {
		// common part: create layout
		horizontalLayout_5 = new HorizontalLayout();
		horizontalLayout_5.setImmediate(false);
		horizontalLayout_5.setWidth("368px");
		horizontalLayout_5.setHeight("-1px");
		horizontalLayout_5.setMargin(false);
		
		// txtCorCorreo
		txtCorCorreo = new TextField();
		txtCorCorreo.setCaption("Correo");
		txtCorCorreo.setImmediate(false);
		txtCorCorreo.setWidth("266px");
		txtCorCorreo.setHeight("-1px");
		txtCorCorreo.setRequired(true);
		horizontalLayout_5.addComponent(txtCorCorreo);
		
		// btnCorrNuevo
		btnCorrNuevo = new Button();
		btnCorrNuevo.setCaption("Nuevo");
		btnCorrNuevo.setImmediate(true);
		btnCorrNuevo.setWidth("-1px");
		btnCorrNuevo.setHeight("-1px");
		horizontalLayout_5.addComponent(btnCorrNuevo);
		horizontalLayout_5
				.setComponentAlignment(btnCorrNuevo, new Alignment(9));
		
		return horizontalLayout_5;
	}

	@AutoGenerated
	private VerticalLayout buildVerticalLayout_7() {
		// common part: create layout
		verticalLayout_7 = new VerticalLayout();
		verticalLayout_7.setImmediate(false);
		verticalLayout_7.setWidth("-1px");
		verticalLayout_7.setHeight("-1px");
		verticalLayout_7.setMargin(true);
		verticalLayout_7.setSpacing(true);
		
		// horizontalLayout_6
		horizontalLayout_6 = buildHorizontalLayout_6();
		verticalLayout_7.addComponent(horizontalLayout_6);
		
		// lblImgValor
		lblImgValor = new Label();
		lblImgValor.setImmediate(false);
		lblImgValor.setWidth("-1px");
		lblImgValor.setHeight("-1px");
		lblImgValor.setValue("Label");
		verticalLayout_7.addComponent(lblImgValor);
		
		// pnlImgImagen
		pnlImgImagen = buildPnlImgImagen();
		verticalLayout_7.addComponent(pnlImgImagen);
		
		return verticalLayout_7;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_6() {
		// common part: create layout
		horizontalLayout_6 = new HorizontalLayout();
		horizontalLayout_6.setImmediate(false);
		horizontalLayout_6.setWidth("500px");
		horizontalLayout_6.setHeight("-1px");
		horizontalLayout_6.setMargin(false);
		
		// pnlImagenUpload
		pnlImagenUpload = buildPnlImagenUpload();
		horizontalLayout_6.addComponent(pnlImagenUpload);
		
		// btnImgAgregar
		btnImgAgregar = new Button();
		btnImgAgregar.setCaption("Agregar");
		btnImgAgregar.setImmediate(true);
		btnImgAgregar.setWidth("-1px");
		btnImgAgregar.setHeight("-1px");
		horizontalLayout_6.addComponent(btnImgAgregar);
		horizontalLayout_6.setComponentAlignment(btnImgAgregar, new Alignment(
				10));
		
		return horizontalLayout_6;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlImagenUpload() {
		// common part: create layout
		pnlImagenUpload = new HorizontalLayout();
		pnlImagenUpload.setImmediate(false);
		pnlImagenUpload.setWidth("-1px");
		pnlImagenUpload.setHeight("-1px");
		pnlImagenUpload.setMargin(false);
		pnlImagenUpload.setSpacing(true);
		
		// lblImgTipo
		lblImgTipo = new Label();
		lblImgTipo.setImmediate(false);
		lblImgTipo.setWidth("-1px");
		lblImgTipo.setHeight("-1px");
		lblImgTipo.setValue("Tipo de Adjunto");
		pnlImagenUpload.addComponent(lblImgTipo);
		
		// cmbImgTipo
		cmbImgTipo = new ComboBoxLOVS();
		cmbImgTipo.setImmediate(false);
		cmbImgTipo.setWidth("100px");
		cmbImgTipo.setHeight("-1px");
		pnlImagenUpload.addComponent(cmbImgTipo);
		
		// proIndImagen
		proIndImagen = new ProgressIndicator();
		proIndImagen.setImmediate(false);
		proIndImagen.setWidth("-1px");
		proIndImagen.setHeight("-1px");
		pnlImagenUpload.addComponent(proIndImagen);
		
		// btnImgCancelar
		btnImgCancelar = new Button();
		btnImgCancelar.setCaption("Cancelar");
		btnImgCancelar.setImmediate(true);
		btnImgCancelar.setWidth("-1px");
		btnImgCancelar.setHeight("-1px");
		pnlImagenUpload.addComponent(btnImgCancelar);
		
		return pnlImagenUpload;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlImgImagen() {
		// common part: create layout
		pnlImgImagen = new HorizontalLayout();
		pnlImgImagen.setImmediate(false);
		pnlImgImagen.setWidth("-1px");
		pnlImgImagen.setHeight("-1px");
		pnlImgImagen.setMargin(false);
		
		// tblImagenes
		tblImagenes = new Table();
		tblImagenes.setImmediate(false);
		tblImagenes.setWidth("500px");
		tblImagenes.setHeight("240px");
		pnlImgImagen.addComponent(tblImagenes);
		
		return pnlImgImagen;
	}


}
